IT公司100题-16-层遍历二元树】的更多相关文章

问题描述: 层遍历二叉树,同一层从左往右打印. 定义二元查找树的结点为: typedef struct BSTreeNode { int data; BSTreeNode *left; BSTreeNode *right; } Node; 例如输入二叉树:    6 /   \ 4    12/ \    / \2 5 8  16 输出:6 4 12 2 5 8 16.   分析: 二叉树的广度优先遍历.   代码实现: // 16.cc #include <deque> #include &…
问题描述: 输入一个整数和一棵二元树.从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径.打印出和与输入整数相等的所有路径. 例如输入整数30和如下二元树   14 / \ 5 16 / \ 3 11 则打印出两条路径:14, 16 和14, 5, 11. 二元树节点的数据结构定义为: typedef struct BSTree { int data; BSTree* left; BSTree* right; } tree_node; 在遍历树的过程中,使用stack保存所走过的路…
[题目] 输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印. 例如输入 8    /  \   6    10  /\     /\ 5  7   9  11 输出8   6   10   5   7   9   11. [分析] 这曾是微软的一道面试题.这道题实质上是要求遍历一棵二元树,只不过不是我们熟悉的前序.中序或者后序遍历. 我们从树的根结点开始分析.自然先应该打印根结点8,同时为了下次能够打印8的两个子结点,我们应该在遍历到8时把子结点6和10保存到一个数据…
问题描述: 输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果. 如果是返回true,否则返回false. 例如输入4, 8, 6, 12, 16, 14, 10,由于这一整数序列是如下树的后序遍历结果:  10/     \6      14/  \    /   \4   8 12    16 因此返回true. 如果输入6, 5, 8, 5, 7 ,则返回false.   分析: 在后续遍历得到的序列中,最后一个元素为树的根结点.根节点元素将数组分为两部分,左边都小于根节点,右…
问题描述: 输入一颗二元查找树,将该树转换为它的镜像树,即对每一个节点,互换左右子树.   例如输入:   6/    \4     12/ \   /   \2  5 8   16 输出:   6/     \12     4/   \   / \16  8 5  2 定义二元查找树的结点为: typedef struct BSTree { int data; BSTree* left; BSTree* right; } Node; 分析: 方法1:递归交换左右子树. // 15_1.cc #…
问题描述: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调整指针的指向. 10   /   \  6      14/  \    /   \4   8 12    16 转换成双向链表4=6=8=10=12=14=16. 首先我们定义的二元查找树 节点的数据结构如下: struct BSTreeNode { int m_nValue; // value of node BSTreeNode *left; // left child of node B…
问题描述: 打印所有到叶子节点长度为2的路径  10  /  \ 6   16 / \   / \ 4 8  14 18   / \    / \    \ 2  5  12 15 20 / 11   打印: [10 6 8] [6 4 2] [6 4 5] [16 14 15] [16 18 20] [14 12 11]   分析: 1, 对于树先做先序遍历. 2, 然后针对每个节点做检查,检查的内容是,是否含有长度为2的叶子节点路径. 3, 检查的过程是,设定一个depth,同时保存当前ro…
问题描述: 写程序,求一棵二叉树中相距最远的两个节点之间的距离. 10/     \6      14/   \   /   \4    8 12    16 分析: 二叉树中最远的两个节点,要么是根和一个叶子节点,要么是两个叶子节点.   代码实现: // 11.cc #include <iostream> using namespace std; typedef struct BSTreeNode { int data; BSTreeNode *left; BSTreeNode *righ…
问题描述: 求一个矩阵中最大的二维矩阵(元素和最大).如: 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 中最大的是: 4 5 9 10   分析: 2*2子数组的最大和.遍历求和,时间复杂度为O(mn).   代码实现: // 35.cc #include <iostream> #include <climits> using namespace std; ], int m, int n) { int max_sum = INT_MIN; int sum; ; i…
问题描述: 实现一个函数,求出字符串中的连续最长数字串.例如输入”12345cbf3456″,输出”12345″. 函数原型为: void conti_num_max( const char * src, char * dest); dest保存最长数字串,返回void. 分析: 遍历一遍字符串,记录起始位置和长度即可.   代码实现: // 25.cc #include <iostream> #include <cstring> using namespace std; void…