程序员节快乐!
希望大家能够在程序员节中
快乐、高兴地
度过属于自己的节日
在二叉树的第i
层上最多有(2i-1)个节点;
深度为k
的二叉树最多有(2k-1)个节点。
如图的二叉树,遍历方式如下:
先序:ABCDEF(根、左、右)
中序:DBEAFC(左、根、右)
后序:DEBFCA(左、右、根)
//Author:PanDaoxi
#include <iostream>
using namespace std;
struct node{
int left,right; //左孩子和右孩子
char value; //值
}data[101];
int root=0,cnt; //根节点和记录有效字符
char ch; //输入的数据
//构建二叉树
int buildTree(int bt){
//参数:结点的编号
cin>>ch;
if(ch=='.'){
//判断是否为空结点
bt=0; //赋值为0
return bt; //跳出程序
}
else{
//非空结点,进行先序遍历
bt=++cnt; //构造结点
data[bt].value=ch; //存放根的值
data[bt].left=data[bt].right=0; //左右孩子都归零
data[bt].left=buildTree(bt); //递归左子树
data[bt].right=buildTree(bt); //递归右子树
}
return bt; //完成递归
}
//后序遍历二叉树
void postorder(int bt){
if(bt){
//非空结点
//递归输出根
postorder(data[bt].left);
postorder(data[bt].right);
cout<<data[bt].value;
}
}
int main(){
root=buildTree(0); //构建二叉树
postorder(root);
return 0;
}