打印二叉树某一层次的值(重点)

方法一:递归

 1 void printNLevel(TreeNode *root, int n)
 2 {
 3     if (root == NULL)
 4     {
 5         return ;
 6     }
 7
 8     if (n == 1)
 9     {
10         cout << root->data << endl;
11     }
12     else
13     {
14         printNLevel(root->left, n-1);
15         printNLevel(root->right, n-1);
16     }
17 }  

方法二:层次遍历

 1 void TransLevel2(Node* root,int level)
 2 {
 3     if(root == NULL)
 4         return ;
 5     else
 6     {
 7         int count_levels,count_nodes,level_nodes;
 8         Node* tmp;
 9         Queue<Node*> queue;
10         queue.EnQueue(root);
11
12         count_levels=1;
13
14         while(!queue.IsEmpty())
15         {
16             if(count_levels == level)
17                 break;
18
19             count_nodes = 0;
20
21             level_nodes = queue.Size();
22
23             while(count_nodes < level_nodes)
24             {
25                tmp = queue.DeQueue();
26
27                if(tmp->left != NULL)
28                     queue.EnQueue(tmp->left);
29
30                if(tmp->right != NULL)
31                     queue.EnQueue(tmp->right);
32
33                count_nodes++;
34             }
35
36             count_levels++;
37         }
38
39         PrintQueue(queue);
40     }
41 }
时间: 2024-10-12 04:18:02

打印二叉树某一层次的值(重点)的相关文章

打印二叉树中和为某一值的路径

输入一个二叉树,查找该树的所有路径(从根结点到叶结点的通路),并返回和(路径上所有结点值的和)为某一指定值的路径. 1 /////////////二叉树中和为某一值的路径///////////////////// 2 void FindPath(BinaryTreeNode* pRoot ,int expectedSum ,vector<int>& path ,int currentSum) 3 { 4 if (pRoot == NULL) 5 { 6 return; 7 } 8 cu

按层换行打印二叉树

题目描述:  二叉树,按层打印,并且每层换行 分析:  我们知道,二叉树的层序遍历需要借助队列来实现,每取出一个节点打印,并将该节点的左右孩子放入队列中,依此反复,直到队列为空时,也就完成了二叉树的按层打印. 基本过程如图所示: 但是,关键是怎么换行? 分析:要换行则需要知道什么时候换行,由二叉树我们可以分析,我们需要知道每一层最右边的节点,每次打印完这个节点的值后,再打印一个换行即可.于是我们这样做: 定义两个变量,last 和 nlast last : 表示正在打印的当前行的最右节点 nla

剑指Offer面试题23(Java版):从上往下打印二叉树

题目:从上往下打印二叉树的每个结点,同一层的结点按照从左到右的顺序打印.例如输入下图的二叉树,则一次打印出8,6,10,5,7,9,11. 这道题实质上考察的就是树的遍历算法,只是这种遍历不是我们熟悉的前序.中序或者后序遍历.由于我们不太熟悉这种按层遍历的方法,可能已下载也想不清楚遍历的过程. 因为按层打印的顺序决定应该先打印的根节点,所以我们从树的根节点开始分析.为了接下来能够打印8的结点的两个子节点,我们应该在遍历到该结点时把值为6和10的两个结点保存到一个容器中,现在容器内就有两个结点了.

剑指OFFER之从上往下打印二叉树(九度OJ1523)

题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行一个整数n(1<=n<=1000, :n代表将要输入的二叉树元素的个数(节点从1开始编号).接下来一行有n个数字,代表第i个二叉树节点的元素的值.接下来有n行,每行有一个字母Ci.Ci='d'表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号.Ci='l'表示第i个节点有一个左孩子,紧接着是左孩子的编号.Ci='r'表示第i个节点有一个右孩

二叉树中和为某一值的路径-剑指Offer

二叉树中和为某一值的路径 题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 思路 用栈来存储二叉树的路径,遍历到叶子结点就判断是否总和为target,是的话打印,若不是叶子结点,那继续遍历左右子树 注意:打印完后返回父结点时要弹出栈顶的叶子结点,并且总和减去该值 注意:打印路径时要遍历栈 代码 import java.util.ArrayList; import java.util.Stack;

蓝桥杯练习系统历届试题 横向打印二叉树

问题描述 二叉树可以用于排序.其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树. 当遇到空子树时,则把该节点放入那个位置. 比如,10 8 5 7 12 4 的输入顺序,应该建成二叉树如下图所示,其中.表示空白. ...|-1210-|...|-8-|.......|...|-7.......|-5-|...........|-4 本题目要求:根据已知的数字,建立排序二叉树,并在标准输出中横向打印该二叉树. 输入格式 输入数据为一行空格分开的

打印二叉树的深度

这道题本质上还是考查二元树的遍历 如果一棵树只有一个结点,它的深度为1.如果根结点只有左子树而没有右子树,那么树的深度应该是其左子树的深度加1:同样如果根结点只有右子树而没有左子树,那么树的深度应该是其右子树的深度加1.如果既有右子树又有左子树呢?那该树的深度就是其左.右子树深度的较大值再加1. 上面的这个思路用递归的方法很容易实现,只需要对遍历的代码稍作修改即可 参考资料:剑指offer 代码: #include <iostream> using namespace std; typedef

从上往下打印二叉树(剑指offer)+队列的应用

从上往下打印二叉树 参与人数:1577时间限制:1秒空间限制:32768K 通过比例:25.53% 最佳记录:0 ms|0K(来自  dust347) 题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 题意:就是树的层次遍历.想象一下,从根结点依次往下,每行从左到右,这不就是是入队和出队的操作嘛! so...代码很容易吧. /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; Tr

【36】按层打印二叉树

算法题目大都比较抽象,可以通过举例子来搞清楚具体的逻辑. 题目: 从上到下,按照从左往右打印二叉树每一层的结点. 二叉树的结点: class BinaryTreeNode{ int mValue; BinaryTreeNode mLeft;; BinaryTreeNode mRight; } 思路: 我们发现规律:先遍历的结点,它的子节点也会先被遍历到,是一个先进先出的模型,考虑用队列来实现. 没遍历一个结点时候,就把它的孩子结点取出来,放到队列的尾部,然后重复这个过程,直到队列为空. 代码: