二叉树
实验目的:
(1)熟悉二叉树的各种存储结构及适用范围。
(2)掌握建立二叉树的存储结构的方法。
(3)熟练掌握二叉树的先序、中序、后序遍历的递归算法和非递归算法。
(4)灵活运用递归的遍历算法实现二叉树的其他各种运算。
(5)掌握和理解本实验中出现的一些基本的C语言语句。
(6)体会算法在程序设计中的重要性。
实验内容:
(1)以二叉链表作存储结构,设计求二叉树高度的算法。
(2)以二叉链表作存储结构,编写递归的中序遍历算法。
(3)以二叉链表作存储结构,编写非递归的中序遍历算法。
(4)以二叉链表作存储结构,编写求二叉树中叶子结点的个数算法。
设二叉树以二叉链表方式存储,试完成下列问题的递归算法。 设二叉树结点和二叉树结构体定义如下: typedef struct btnode { ElemType element; struct btnode* lchild, *rchild; }BTNode; typedef struct binarytree{ BTNode* root; }BinaryTree; (1)求一棵二叉树的高度; int Depth(BTNode *p) { int lh, rh; if (!p) return 0; lh = ______________; rh = _____________; if (lh > rh) return _________; else return ________; } int DepthofBT(BinaryTree Bt) { return ___________; } (2)求一棵二叉树中的结点个数; int Size(BTNode * p) { if (!p) return _____ ; else return Size(p->lchild)+______________+1; } int SizeofBT(BinaryTree Bt) { return ______________); } (3)交换一棵二叉树中每个结点的左、右子树。 void exchange (BTNode * p) { if(!p) return; if (p->lchild != NULL || p->rchild != NULL ) { temp = p->lchild; p->lchild = ____________; p->rchild = temp; exchange (___________ ); exchange (p->rchild ); } } void exchange(BinaryTree *bt) { ____________________; }
1的结点个数。
(2)统计二叉树中度为2的结点个数。
(3)统计二叉树中度为0(叶结点)的结点个数。
(4)统计二叉树的深度。
(5)统计二叉树的宽度,即在二叉树的各层上,具有结点数最多的那一层上结点总数。
(6)从二叉树中删去所有叶结点。
(7)计算二叉树中指定结点*p所在层次。
(8)计算二叉树中各结点中的最大元素的值。
(9)以前序次序输出一棵二叉树所有结点的数据值及结点所在的层次。
设一棵二叉树以二叉链表为存储结构,结点结构为(1child,data,rchild),设计一个算法将二叉树中所有结点的左、右子树相互交换。【福州大学1998四、2(10分)】
A.k--
B.n++
C.t = t->lchild
D.t = t->rchild
A.k--
B.n++
C.t = t->lchild
D.t = t->rchild
为了保护您的账号安全,请在“简答题”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!