打印二叉树的边界节点 c++实现
来源:互联网 发布:盘古ios9.2 for mac 编辑:程序博客网 时间:2024/06/03 13:23
给定一颗二叉树的头结点,按照下面的规则实现二叉树的边界节点的逆时针打印。
- 头结点的边界节点
- 叶子节点为边界节点
- 如果节点在所在层的最左边或者最右边,那么也是边界节点
比如下图这棵树:
程序流程
1.得到二叉树上每一层最左和最右的节点,用上图的例子来说,这个记录过程如下:
2. 从上到下打印所有层找那个的最左节点,对上面的例子来讲,打印的顺序为:1,2,4,7,11,13。
3. 然后前序遍历二叉树,打印那些不属于某一层的最左或者最右的节点,但同时又是叶子节点,按照上面的例子来说打印的是:14,15。
4. 从下到上打印所有层中的最右的节点但不是最左节点的节点,对于上面的例子来说是:16,12,10,6,3
过程代码如下:
#include <cstdio>#include <iostream>using namespace std;struct Tree{ Tree* lson; Tree* rson; int data;};Tree* T;Tree* edgeMap[100+5][2];void createBtiTree(Tree* &tree){ int data; cin>>data; if(data==-1) { tree=NULL; }else { tree = new Tree(); tree->data = data; createBtiTree(tree->lson); createBtiTree(tree->rson); }}int getHeight(Tree* tree,int l){ if(tree==NULL) return l; return max(getHeight(tree->lson,l+1),getHeight(tree->rson,l+1));}void setEdgeMap(Tree* h,int l){ if(h==NULL) return ; if(edgeMap[l][0]==NULL) edgeMap[l][0] = h; edgeMap[l][1] = h; setEdgeMap(h->lson,l+1); setEdgeMap(h->rson,l+1);}void printLeafNotInMap(Tree* h,int l){ if(h==NULL) return ; if(h->lson==NULL && h->rson==NULL && edgeMap[l][0]!=h && edgeMap[l][1]!=h) { cout<<h->data<<" "; } printLeafNotInMap(h->lson,l+1); printLeafNotInMap(h->rson,l+1);}void printEdge(Tree* tree){ int hei = getHeight(tree,0); setEdgeMap(tree,0); for(int i=0;i<hei;i++) cout<<edgeMap[i][0]->data<<" "; printLeafNotInMap(tree,0); while((--hei)>=0) if(edgeMap[hei][0]!=edgeMap[hei][1]) cout<<edgeMap[hei][1]->data<<" "; cout<<endl;}int main(){ freopen("in.txt","r",stdin); createBtiTree(T); printEdge(T); return 0;}
0 0
- 打印二叉树的边界节点 c++实现
- 打印二叉树的边界节点
- 打印二叉树的边界节点
- 打印二叉树边界节点
- 二叉树问题---打印二叉树的边界节点
- 打印二叉树的边界节点-代码指南
- 按之字形打印二叉树的节点【两个栈实现】
- 打印二叉树的边缘节点
- 打印二叉树的边缘节点
- 打印二叉树的边缘节点
- 3.10分层打印二叉树的节点
- 按照之字形打印二叉树的节点
- 打印二叉树的叶子节点
- java实现从上往下打印出二叉树的每个节点,同层节点从左至右打印。
- 打印二叉树中某个节点的所有父节点
- 打印二叉树中一个节点的所有祖先节点
- 求二叉树中两个节点的最近公共节点的C程序实现代码
- 二叉树的建立、节点查找以及节点删除C和C++实现
- 51Nod-1198-字符串的数量 V3
- unity3d--镜头跟随及控制(RPG游戏黑暗之光)
- iOS新升级,Xcode运行报错Could not find developer disk image(内含最新开发包)
- 常见Javase中的的网络编程
- Ubuntu14.04.5安装solr-5.0.0的两种方式
- 打印二叉树的边界节点 c++实现
- (转)去中心化:关于区块链的争论
- EchartsTest --- Echarts 的 servlet 实现 动态获取数据 练习
- UI
- node Error: Most middleware (like session) is no longer bundled with Express and must be installed
- HTML用正则表达式检验表格
- Angularjs service factory provider
- SVM支撑矢量机
- hdu5902 数论