树就是非线性数据结构,相对于以前所学的全部知识来讲,树与二叉树的难度要高于以前所学的知识。孩子树,双亲树,孩子兄弟树,二叉树,这些都是重点。 关于树的学习,树的基本术语,树的性质,这些都是咱们须要去记得东西。尤为是学习树,还要懂得如何去画树,画图软件也是咱们须要学习的。
6-4 jmu-ds-表达式树 (25 分)
建栈 初始化:stacktree栈 while(表达式未结束) if(ch==操做数) 生成一个只有根结点的子树T if(ch==运算符) while(ch<op栈顶运算符) 栈顶优先级高,则 建立一个树结点T,数据为op.top() stacktree弹出2个根结点T1,T2 T->lchild=T1,T->rchild=T2 stacktree.push(T) if(ch>op顶运算符) op.push(ch) if(ch==op顶运算符) 则op.pop() if(T不为空) then if(左右子树不为空) then 返回对应数值 递归左右子树获得a,b switch(结点值) 对应符号计算 返回值 if(除数为0) then 输出错误 else a/b
Q1:在写由于switch部分忽略了break致使部分正确
7-4 jmu-ds-二叉树叶子结点带权路径长度和 (25 分)
首先定义结构体用于储存二叉树 BinTree CreateBTree(string str, int i, int h); 定义函数 wpl(BinTree T); 求和、 BinTree CreateBTree(string str, int i, int h) { if i < 0 且 i >= length do 返回 NULL; end if if str[i] == '#' 返回 NULL; end if 定义结构体变量 t,并赋予空间; 用来储存二叉树 返回 t; } int wpl(BinTree T) { if BT == NULL 返回 0; end if if BT->left == NULL 且 BT->right == NULL 返回 ((BT->data - '0')*BT->high); end if 返回 (wpl(BT->left) + wpl(BT->right)); }
Q1:在树的创建上出现了错误
7-1 还原二叉树
main 定义n ch a[MaxSize],b[MaxSize] ,T T=ReturnTree(a,b,N); 输出 GetHight(T) BTree ReturnTree if(length==0) return NULL 创建T的节点空间 T->data=*b for(i=0;i!=length;i++) T->lchild=ReturnTree(a,b+1,i); T->rchild=ReturnTree(a+i+1,b+i+1,length-i-1); 返回T int GetHight 定义l, r; if(BT==NULL) 返回0 l=GetHight(BT->lchild); r=GetHight(BT->rchild); 返回结果 (l>r?l+1:r+1)
Q1:建树的递归有一些问题,最开始直接运用T->lchild=CreatTree( s, 2 * i)这个,可是建的不对,最后借鉴了一下别人的方法,改正了一下
树上机考试--网络18 7-2 jmu-ds-输出二叉树每层节点
错误代码
编程
二叉树为空的状况漏考虑了,要考虑这个只要在刚开始入队状况下加上判断队列为空的条件便可解决;关于树的学习上,从遍历最基础的开始,树的不少操做都要用到递归,而递归是一件让人很头疼的事,在遇到递归函数时,常常会出现混乱,