用递归方法对二叉树进行层次遍历
来源:互联网 发布:group by 多个字段知乎 编辑:程序博客网 时间:2024/06/03 16:34
在这里看到了这个题。层次遍历是用队列,一级一级地入队列然后输出。而用递归的话,我首先想到是用两个栈来模拟队列,在递归遍历二叉树的过程中入栈,然后最后一次性出栈。但仔细思考后发现无法做到层次遍历。在这里看到了正确的方法。
主要代码如下:
1 void PrintNodeAtLevel(BiTree T,int level) 2 { 3 // 空树或层级不合理 4 if (NULL == T || level < 1 ) 5 return; 6 7 if (1 == level) 8 { 9 cout << T->data << " ";10 return;11 }12 13 // 左子树的 level - 1 级14 PrintNodeAtLevel(T->leftChild, level - 1);15 16 // 右子树的 level - 1 级17 PrintNodeAtLevel(T->rightChild, level - 1);18 }19 20 21 void LevelTraverse(BiTree T)22 {23 if (NULL == T)24 return;25 26 int depth = Depth(T);27 28 int i;29 for (i = 1; i <= depth; i++)30 {31 PrintNodeAtLevel(T, i);32 cout << endl;33 }34 }
这个算法先求出根结点的高度,depth=高度+1。在函数PrintNodeAtLevel中,当且仅当level==1时才进行打印。举个例子:
1
2 3
4 5 6 7
这棵树的根的高度是2,depth=3。然后,在LevelTraverse函数中,level从1开始,这会打印出1;之后level=2,进入PrintNodeAtLevel(T->leftChild, level - 1)函数和PrintNodeAtLevel(T->rightChild, level - 1),level又等于1,就打印出2,3。以此类推,整棵树就按层打印出来了。
参考资料(即此递归算法的来源):http://blog.csdn.net/stpeace/article/details/8138458
- 用递归方法对二叉树进行层次遍历
- 用递归方法对二叉树进行层次遍历
- 用递归方法对二叉树进行层次遍历
- 用递归方法对二叉树进行层次遍历(某公司实习生招聘笔试试题)
- 用递归方法对二叉树进行先序、中序和后序遍历
- 用递归方法对二叉树进行先序、中序和后序遍历
- 用递归方法对二叉树进行先序、中序和后序遍历
- 层次遍历二叉树的方法(递归,队列,指针)
- 二叉树遍历(层次,递归,非递归)
- 递归和非递归对二叉树进行前序中序后序遍历
- (1)建立二叉树的二叉链表。 (2)写出对用二叉链表存储的二叉树进行先序、中序和后序遍历的递归和非递归算法。 (3)写出对用二叉链表存储的二叉树进行层次遍历算法。 (4)求二叉树的所有叶子及结点总数。
- 非递归按层次遍历二叉树
- 非递归二叉树层次遍历算法
- 二叉树层次遍历与递归释放
- 二叉树的非递归层次遍历
- 二叉树非递归层次遍历
- 非递归层次遍历方法实现二叉树中指定节点的层次数查找
- 不用递归和辅助空间对二叉树进行遍历
- 矩阵快速幂 zoj-3690 Choosing number
- Java的内存回收机制
- 黑马程序员—网络编程
- Dijkstra算法
- vim filetype.vim
- 用递归方法对二叉树进行层次遍历
- gcc的使用简介与命令行参数说明
- ViewPager初识
- strcpy函数实现
- 享受Code::Blocks编辑快感的几个关键
- make命令解析
- C. Building Permutation
- Go With the Flow
- ZOJ 1025 Wooden Sticks