2024年4月4日发(作者:)
树与二叉树算法汇总
1.以二叉树表示算术表达式,根结点用于存储运算符。若能先分别求出左子树和右子
树表示的子表达式的值,最后就可以根据
根结点的运算符的要求,计算出表达式的最后结果。
typedef struct node
{ElemType data; float val;
char optr; //只取‘+’, ‘-’, ‘*’,‘/’
struct node *lchild,*rchild }BiNode,*BiTree;
float PostEval(BiTree bt) // 以后序遍历算法求以二叉树表示的算术表达式的值
{float lv,rv;
if(bt!=null)
{lv=PostEval(bt->lchild); // 求左子树表示的子表达式的值
rv=PostEval(bt->rchild); // 求右子树表示的子表达式的值
switch(bt->optr)
{ case ‘+’: value=lv+rv; break;
case ‘-’: value=lv-rv;break;
case ‘*’: value=lv*rv;break;
case ‘/’: value=lv/rv;
} } return(value);
}
32.二叉树采取顺序结构存储,是按完全二叉树格式存储的。对非完全二叉树要补上“虚
结点”。由于不是完全二叉树,在顺序结
构存储中对叶子结点的判定是根据其左右子女为0。叶子和双亲结点下标间的关系满足
完全二叉树的性质。
int Leaves(int h) //求深度为h 以顺序结构存储的二叉树的叶子结点数
{ int BT[]; int len=2h-1, count=0; //BT 是二叉树结点值一维数组,容量为2h
for (i=1;i<=len;i++) //数组元素从下标1 开始存放
if (BT[i]!=0) //假定二叉树结点值是整数,“虚结点”用0 填充


发布评论