IT公司100题-tencent-打印所有高度为2的路径
问题描述:
[10 6 8]
[6 4 2]
[6 4 5]
[16 14 15]
[16 18 20]
[14 12 11]
#include <iostream>
#include "../utility/printCollection.h"
using namespace std; struct bsnode{
int data;
bsnode* left;
bsnode* right;
}; void add_bsnode(bsnode* &root, int value)
{
if(root == NULL)
{
bsnode* tmp = new bsnode();
tmp->data = value;
tmp->left = NULL;
tmp->right = NULL;
root = tmp;
return;
}
if(value > root->data)
add_bsnode(root->right, value);
else if(value < root->data)
add_bsnode(root->left, value);
else
cout << "duplicate value" << endl;
} void print_tree(bsnode* root)
{
if(root == NULL)
return;
if(root->left != NULL)
print_tree(root->left);
cout << root->data << " ";
if(root->right != NULL)
print_tree(root->right);
} void check_node(bsnode* root, int n, int &depth, vector<int> &path)
{
//如果当前深度>n,不需要继续访问
if(depth > n || root == NULL)
return; //检查前压栈当前节点,depth+1
path.push_back(root->data);
depth++; //如果当前深度=n
if(depth == n)
if(root->left == NULL && root->right == NULL)
{
cout << "path found: " << endl;
printCollection(path);
cout << endl;
} //如果当前深度<n
if(depth < n)
if(root->left != NULL)
check_node(root->left, n, depth, path);
if(root->right != NULL)
check_node(root->right, n, depth, path); //检查完出栈当前节点,depth-1
path.pop_back();
depth--;
return;
} void print_node(bsnode* root, int n)
{
if(root == NULL)
return; //每次检查前重定义depth
int depth = -;
vector<int> path; //每次检查前clear path
path.clear(); //检查当前节点的所有叶子节点的高度
check_node(root, n, depth, path); //递归检查左子树
print_node(root->left, n);
//递归检查右子树
print_node(root->right, n);
} int main()
{
bsnode* root = NULL;
add_bsnode(root, );
add_bsnode(root, );
add_bsnode(root, );
add_bsnode(root, );
add_bsnode(root, );
add_bsnode(root, );
add_bsnode(root, );
add_bsnode(root, );
add_bsnode(root, );
add_bsnode(root, );
add_bsnode(root, );
add_bsnode(root, );
add_bsnode(root, ); cout << "Tree content: " << endl;
print_tree(root);
cout << endl << endl; int height = ;
cout << "Nodes that with height " << height << " are:" << endl;
print_node(root, height);
cout << endl;
}
输出:
$ ./a.exe
Tree content: Nodes that with height are:
path found:
[ ] path found:
[ ] path found:
[ ] path found:
[ ] path found:
[ ] path found:
[ ]
IT公司100题-tencent-打印所有高度为2的路径的更多相关文章
- IT公司100题-32-交换元素,使数组差最小
问题描述: 有两个整数序列a, b,大小都为n, 序列元素的值任意整数,无序. 要求:通过交换a, b 中的元素,使得sum(a)-sum(b),差最小. 例如: var a=[80, 40, 60, ...
- IT公司100题-21-输入n和m,和等于m
问题描述: 输入两个整数n 和m,从数列1,2,3,…,n 中随意取几个数, 使其和等于m,将所有可能的组合都打印出来. 分析: 利用递归的思路,对于1,2,3,…,n 中的任意一个数,要么选,要 ...
- IT公司100题-16-层遍历二元树
问题描述: 层遍历二叉树,同一层从左往右打印. 定义二元查找树的结点为: typedef struct BSTreeNode { int data; BSTreeNode *left; BSTreeN ...
- IT公司100题-15-求二元查找树的镜像
问题描述: 输入一颗二元查找树,将该树转换为它的镜像树,即对每一个节点,互换左右子树. 例如输入: 6/ \4 12/ \ / \2 5 8 16 输出: 6/ ...
- IT公司100题-4-在二元树中找出和为某一值的所有路径
问题描述: 输入一个整数和一棵二元树.从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径.打印出和与输入整数相等的所有路径. 例如输入整数30和如下二元树 14 / \ 5 16 / ...
- IT公司100题-1-二叉树转换为双链表
问题描述: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调整指针的指向. 10 / \ 6 14/ \ / \4 8 1 ...
- IT公司100题-35- 求一个矩阵中最大的二维矩阵(元素和最大)
问题描述: 求一个矩阵中最大的二维矩阵(元素和最大).如: 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 中最大的是: 4 5 9 10 分析: 2*2子数组的最大和.遍历求和,时 ...
- IT公司100题-28-整数的二进制表示中1的个数
问题描述: 输入一个整数n,求n的二进制表示中,一共有多少个1.例如n=8,二进制表示为00001000,二进制表示中有1个1. 分析: 如果一个数n不为0,那么n-1的二进制表示,与n的二进 ...
- IT公司100题-27-跳台阶问题
问题描述: 一个台阶总共有n阶,一次可以跳1级或者2级.求总共有多少种跳法. 分析: 用f(n)表示n阶台阶总共有多少种跳法.n阶台阶,第一可以选择跳1阶或者2阶,则f(n) = f(n-1) + ...
随机推荐
- POJ - 3652 Persistent Bits
“模拟”类型,题型容易,使用bitset库对二进制逐位操作,初始化.十进制转二进制(unsigned int).位操作. POJ - 3652 Persistent Bits Time Limit: ...
- VIM 中鼠标选择不选中行号
VIM 中鼠标选择不选中行号 在Vim中,我们一般会使用 :set nu 打开行号开关. 但是打开行号后,有个弊端,那就是在用鼠标进行选择的时候,会将前面的行号也一起进行拷贝了.但是在gVim中进行选 ...
- Bitnami redmine备份升级步骤
从3.2.1升级至3.3.0,不确定数据库结构是否有变化,主要过程:先停止服务,安装redmine模块,恢复服务. 以下适用于windows操作系统,采用Bitnami安装方式: 1.完整备份 Fol ...
- 使用percona-toolkit校验主从数据的一致性
主从数据校验使用percona-toolkit工具集的以下两个工具(主库上使用): pt-table-checksum #检查主从数据是否一致, pt-table-sync #把主库数据同步到从库 ...
- (8) 深入理解Java Class文件格式(七)
转载:http://blog.csdn.net/zhangjg_blog/article/details/22091529 本专栏列前面的一系列博客, 对Class文件中的一部分数据项进行了介绍. 本 ...
- 在Tomat7上使用Redis保存Session
源博客http://my.oschina.net/gccr/blog/321083 当用户量大.应用服务器使用集群来布署时,使用Tomcat默认自带的Session就不能满足需求了.当然解决方法有很多 ...
- [问题2014S05] 复旦高等代数II(13级)每周一题(第五教学周)
[问题2014S05] 设 \(A,B\) 分别是 \(4\times 3\) 和 \(3\times 4\) 实矩阵, \[ BA=\begin{pmatrix}-9 & -20 & ...
- C#中静态与非静态方法比较
C#静态方法与非静态方法的区别不仅仅是概念上的,那么他们有什么具体的区别呢?让我们通过本文向你做一下解析. C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用 ...
- viewport和media query
viewport: 你可以定义viewport的宽度.如果你不使用width=device-width,在移动端上你的页面延伸会超过视窗布局的宽度(width=980px),如果你使用了width=d ...
- 《BI那点儿事》数据仓库建模:星型模式、雪片模式
数据仓库建模 — 星型模式Example of Star Schema 数据仓库建模 — 雪片模式Example of Snowflake Schema 节省存储空间 一定程度上的范式 星形 vs.雪 ...