正在加载图片...
return(O) main( 先生成二叉排序树,再调用中序遍历递归函数进行排序输出* Int Lx root=NULL /*千万别忘了赋初值给root!* dof printf("please input data %d: " 1: scanf("%d",&x) /*从键盘采集数据,以-9999表示输入结束* DlR(root) printf("\nNow output count value: %d\n", sum) return(O) else insert data(x); /*调用插入数据元素的函数* while(x!=-9999) return(0); 1 执行结果: 口(naet1vex please input data1: 12 lease input data2 8 nput data4: 1 lease input data5: 16 lease input data6: 2 please input data7: 13 lease input data9: 21 lease input data10: 4 please input data11:-9999 Now output count value: 4 若一开始运行就输入-999,则无叶子输出,sum=0。 2.【全国专升本统考题】写出求二叉树深度的算法,先定义二叉树的抽象数据类型。(10分) 或【严题集6.4④】编写递归算法,求二叉树中以元素值为x的结点为根的子树的深度。 答:设计思路:只査后继链表指针,若左或右孩子的左或右指针非空,则层次数加1:否则函数返回。 但注意,递归时应当从叶子开始向上计数,否则不易确定层数。 int depth(iuyu*root)/*统计层数* Hint d, p /注意每一层的局部变量dp都是各自独立的* if(root==NULL)return(p) *找到叶子之后才开始统计* d=depth(root->lchild) if(d>p)p=d /*向上回朔时,要挑出左右子树中的相对大的那个深度值* d=depth(root->rchild) if(d>p)p=d7 return(0); } main() /*先生成二叉排序树,再调用中序遍历递归函数进行排序输出*/ {int i,x; i=1; root=NULL; /*千万别忘了赋初值给 root!*/ do{printf("please input data%d:",i); i++; scanf("%d",&x); /*从键盘采集数据,以-9999 表示输入结束*/ if(x==-9999){ DLR(root); printf("\nNow output count value:%d\n",sum); return(0); } else insert_data(x);} /*调用插入数据元素的函数*/ while(x!=-9999); return(0);} 执行结果: 若一开始运行就输入-9999,则无叶子输出,sum=0。 2.【全国专升本统考题】写出求二叉树深度的算法,先定义二叉树的抽象数据类型。 (10 分) 或【严题集 6.44④】编写递归算法,求二叉树中以元素值为 x 的结点为根的子树的深度。 答;设计思路:只查后继链表指针,若左或右孩子的左或右指针非空,则层次数加 1;否则函数返回。 但注意,递归时应当从叶子开始向上计数,否则不易确定层数。 int depth(liuyu*root) /*统计层数*/ {int d,p; /*注意每一层的局部变量 d,p 都是各自独立的*/ p=0; if(root==NULL)return(p); /*找到叶子之后才开始统计*/ else{ d=depth(root->lchild); if(d>p) p=d; /*向上回朔时,要挑出左右子树中的相对大的那个深度值*/ d=depth(root->rchild); if(d>p)p=d; }
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有