问题一.输出二叉树中的叶节点(左右子都为空)
只需在遍历过程中增加一个if语句判断是否为空即可。
void preorderprintleaves(Bintree BT)
{
if(BT){
if(!BT->Left&&!BT->Right)
printf("%d",BT->Data);
preorderprintleaves(BT->Left);
preorderprintleaves(BT->Right);
}
}
问题二.求二叉树的深度
求出左子树和右子树的值取最大即可。
int postordergetheight(bintree BT)
{
int HL,HR,MAXH=0;
if(BT){
HL=postordergetheight(BT->Left);
HR=postordergetheight(BT->Right);
MAXH=(HL>HR)?HL:HR;
return (MAXH+1);
}
else return 0; //空树的深度为0.
}
问题三.二元表达式及其遍历
二叉树的根节点为运算符号,叶节点为数字,将其进行先序遍历可得到运算式的前缀表达式,同理,中序遍历以及后序遍历也可得到中缀表达式和后缀表达式,但中缀表达式受到运算优先级的影响,所以中缀表达式是不一定准确的。
问题四.根据遍历确定二叉树。
只根据两次遍历确定一个树,则必须要有一个中序遍历。
例:根据先序遍历和中序遍历确定一棵二叉树。
1 首先,根据先序遍历结果中的首个元素即为根节点。
2 在中序遍历结果中找到该元素,将其分成两个左右子序列
3 在对分成的两个左右子序列进行递归操作。