知识大全 数据结构考研分类复习真题 第六章 答案 (五)[29]
Posted 结点
篇首语:冲天香阵透长安,满城尽带黄金甲。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第六章 答案 (五)[29]相关的知识,希望对你有一定的参考价值。
[题目分析] 由定义 结点的平衡因子bf等于结点的左子树高度与右子树高度之差 设计一遍历算法 在遍历结点时 求结点的左子树和右子树的高度 然后得到结点的平衡因子
int Height(BiTree bt)//求二叉树bt的深度 int hl hr; if (bt==null) return( ); else hl=Height(bt >lchild); hr=Height(bt >rchild); if(hl>hr) return (hl+ ); else return(hr+ ); // Height void Balance(BiTree bt) //计算二叉树bt各结点的平衡因子 if (bt) Balance(bt >lchild); //后序遍历左子树 Balance(bt >rchild); //后序遍历右子树 hl=Height(bt >lchild); hr=Height(bt >rchild);//求左右子树的高度 bt >bf=hl hr; //结点的平衡因子bf //算法结束
[题目分析]本题应采用层次遍历方式 若树不空 则二叉树根结点入队 然后当队列不空且队列长不超过n 重复如下操作 出队 若出队元素不为空 则记住其下标 且将其左右子女入队列 若出队元素为空 当作虚结点 也将其 虚子女 入队列 为节省空间 就用树T的顺序存储结构A[ n]作队列 队头指针front 队尾指针rear 元素最大下标last
void Traverse(BiTree bt int n) // 求二叉树bt的顺序存储结构A[ n] 下标超过n报错 给出实际的最大下标 BiTree A[] p; if(bt!=null) int front= rear= last= ; A[ ]=bt; while(front<=rear) p=A[++front]; if(p) last=front; // 出队;用last记住最后一个结点的下标 rear= *front;//计算结点(包括虚结点) 左子女 下标 if (p) //二叉树的实际结点 if(rear>n) printf( %c结点无左子女 ); else A[rear]=p >lchild; if(rear+ >n) printf( %c结点无右子女 ); else A[rear+ ]=p >rchild; else //p是虚结点 if(rear<=n) A[rear]=null; if(rear+ <=n) A[rear+ ]=null; // while(front<=rear) printf( 实际的最大下标是%d last); //if(bt!=null) //Traverse
cha138/Article/program/sjjg/201311/23707相关参考