编程之美 - 分层遍历二叉树
来源:互联网 发布:smb协议端口 编辑:程序博客网 时间:2024/05/30 04:06
问题描述
一棵二叉树,按从上到下,从左到右的方式进行遍历,打印它的所有的节点。
例如二叉树
输出的结果为
a
bc
def
思路:
二叉树遍历的方式为分层方式
每一层都可以看做是一个链表,根节点level 0可以看做只有一个元素的链表。当遍历level 0时,可以同时将根节点的左右子树放入level 1的链表中。当遍历level1的链表时可以同理生成level2的链表。完成分层遍历。 level 0,level 1,level 2的链表使用同一个链表即可。
代码示例:
#include <iostream>#include <list>using namespace std;typedef struct _node_st{ char _data; _node_st* _pleft; _node_st* _pright;} node_st;list<node_st*> node_list;void print_tree(node_st* proot){ int count = 1; int sub_count = 0; int i = 0; node_st *pnode = NULL; node_list.push_back(proot); while(count > 0) { for (i = 0; i < count; i++) { pnode = node_list.front(); node_list.pop_front(); printf("%c ", pnode->_data); if (pnode->_pleft) { node_list.push_back(pnode->_pleft); sub_count++; } if (pnode->_pright) { node_list.push_back(pnode->_pright); sub_count++; } } printf("\n"); count = sub_count; sub_count = 0; } printf("\n-----------------------------------------\n");}node_st* rebuild_pre_in2(char* pre, char* mid, int start, int length){ node_st *node; int j = 0; if ((length <= 0) || ((pre == NULL) || (mid == NULL))) return NULL; node = new node_st; node->_data = pre[start]; node->_pleft = node->_pright = NULL; if (1 == length) return node; for (j = 0; j < length; j++) { if (mid[start+j] == node->_data) break; } node->_pleft = rebuild_pre_in2(pre, mid, start+1, j); node->_pright = rebuild_pre_in2(pre, mid, start+(j+1), length-j-1); return node;}void main(){ char pre[] = {'a','b','d','c','e','f'}; char mid[] = {'d','b','a','e','c','f'}; int len = sizeof(pre)/sizeof(pre[0]); node_st* proot = NULL; proot = rebuild_pre_in2(pre, mid, 0, len); print_tree(proot); cin>> len;}
0 0
- 编程之美:分层遍历二叉树
- 编程之美---分层遍历二叉树
- 分层遍历二叉树-编程之美
- 编程之美-----分层遍历二叉树
- [编程之美]分层遍历二叉树
- [编程之美] 分层遍历二叉树
- 编程之美--分层遍历二叉树
- 编程之美-分层遍历二叉树
- 编程之美 - 分层遍历二叉树
- 读书笔记之编程之美 - 3.10 分层遍历二叉树
- 编程之美系列之二叉树的分层遍历
- 编程之美读书笔记_3.10 分层遍历二叉树
- 编程之美读书笔记_3.10 分层遍历二叉树
- 编程之美读书笔记3:3.10分层遍历二叉树
- 编程之美读书笔记 分层遍历二叉树
- 《编程之美》 3.10 分层遍历二叉树
- 编程之美——3.10 分层遍历二叉树
- 编程之美--分层次遍历二叉树
- sql中将一个表中的数据导入到另一个表中
- 【数学:线性代数】如何生动有趣的入门线性代数
- Sql 标识列 增长1000
- 欧拉工程第五题 找出最小能被1-20中每个数整除的数
- python代码打包dist并发送到pypi网站的方法
- 编程之美 - 分层遍历二叉树
- Gradle的简介与安装
- Bootstrap 学习之 (九)------ 输入框组
- 命令行模式下java *class报错
- GDB调试core文件小记
- 【2016-CCPC-K】匈牙利算法,最大基数匹配(Kingdom of Obsession,hdu 5943)
- NOIPTGA组T1方程式 多项式除法
- popwindow显示出现黑色闪屏效果
- asp.net signalR 专题—— 第一篇 你需要好好掌握的实时通讯利器