1.求叶节点个数(包含于4.)
2.由已知中序、先序序列建树
3.求高度
4.求度为1/2/0的节点个数
5.交换二叉树左右孩子(镜面反射二叉树)
6.查找先序序列中第k个节点
7.根据先序、后序确定满二叉树
8.判断两个二叉树是否相似
9.二叉树线索化
10.在中序线索二叉树里查找指定节点在后序的前驱节点
11.叶节点的带权路径长度之和
2.由已知中序、先序序列建树
算法思想:设先序序列为pre[],中序序列为mid[],先序序列第一个元素为根节点,在中序序列中找到根节点,左边为左子树,右边为右子树,求出左右子树的长度。更新序列首位,进行递归。
btree creatree(pre[],mid[],int f1,int r1,int f2,int r2){
//f1,r1为pre的先序序列首尾指针,f2,r2为中序序列mid的首尾指针
int i;
root=new btnode;
root->data=pre[f1]->data;
for(i=f2;pre[f1]!=mid[i];i++);//找到根节点在中序序列的位置
len1=i-f2;//左子树长度
len2=r2-i;//右子树长度
if(len1) //左子树存在
root->lchild=creatree(pre[],mid[],f1+1,f1+len1,f2,f2+len1-1);
else root->lchild=null;
if(len2)//右子树存在
root->rchild=creatree(pre[],mid[],r1-len2+1,r1,r2-len2+1,r2);
else root->rchild=null;
return root;
}
3.求高度
算法思想:左右子树较高的高度+1(后序遍历)
int d;//全局变量
int depth(btree t){
if(t==null) return 0;
int dl,dr;
dl=depth(t->lchild);
dr=depth(t->rchild);
d=dl>dr?dl:dr;
return d;
}
或者:先序遍历。