问题一.输出二叉树中的叶节点(左右子都为空)
只需在遍历过程中增加一个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 在对分成的两个左右子序列进行递归操作。
本文深入探讨了二叉树的基本算法,包括叶节点输出、树深度计算、表达式遍历及树结构确定方法。通过具体实例,阐述了先序、中序及后序遍历的应用,以及如何结合遍历结果重建二叉树。
675

被折叠的 条评论
为什么被折叠?



