知识大全 数据结构考研分类复习真题 第六章 答案 (五)[21]
Posted 结点
篇首语:逆水行舟用力撑,一篙松劲退千寻。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第六章 答案 (五)[21]相关的知识,希望对你有一定的参考价值。
TYPE bitreptr=^binode; binode=RECORD data:ElemType; lchild rchlid:bitreptr END; PROC PreOrder(bt:bitreptr); //非递归前序遍列二叉树 VAR S:ARRAY[ max] OF bitreptr; //max是栈容量 足够大 inits(S);//栈初始化 WHILE (bt<>NIL) OR (NOT empty(S)) DO [WHILE (bt<>NIL )DO [write(bt↑data); push(S bt >rchild); bt:=bt↑ lchild;]//访问结点 右子女进栈 WHILE (NOT empty(S) AND top(S)=NIL) bt:=pop(S);// 退栈 IF NOT empty(S) THEN bt:=pop(S); ] ENDP;
[算法讨论]若不要求使用top(S) 以上算法还可简化
[题目分析]二叉树采取顺序结构存储 是按完全二叉树格式存储的 对非完全二叉树要补上 虚结点 由于不是完全二叉树 在顺序结构存储中对叶子结点的判定是根据其左右子女为 叶子和双亲结点下标间的关系满足完全二叉树的性质
int Leaves(int h) //求深度为h以顺序结构存储的二叉树的叶子结点数 int BT[]; int len= h count= ; //BT是二叉树结点值一维数组 容量为 h for (i= ;i<=len;i++) //数组元素从下标 开始存放 if (BT[i]!= ) //假定二叉树结点值是整数 虚结点 用 填充 if(i* )>len) count++; //第i个结点没子女 肯定是叶子 else if(BT[ *i]== && *i+ <=len && BT[ *i+ ]== ) count++; //无左右子女的结点是叶子 return (count) //结束Leaves
cha138/Article/program/sjjg/201311/23721相关参考