数据结构之二叉树编程实验报告.docVIP

  • 30
  • 0
  • 约2.71千字
  • 约 5页
  • 2021-10-18 发布于广东
  • 举报
精品文档 精品文档 PAGE / NUMPAGES 精品文档 试验报告: 二叉树 题目: 建立一棵二叉树,数据以字符串形式从键盘输入,在此二叉树上完成: 前序、中序、后序遍历 求出叶子数 求树高 左右子树交换,输出交换后的前序、中序遍历序列 分析: 建树: 输入的字符串序列为带有空节点的前序遍历序列〔空节点用*表示〕。 = 1 \* GB3 ①:前序,中序,后序遍历:递归遍历 = 2 \* GB3 ②:求叶子数: 当一个节点的左右孩子都是NULL时,此节点即为叶子节点。 = 3 \* GB3 ③:求树高 当前节点的树高等于其左右孩子树高大的加1。 = 4 \* GB3 ④:左右子树交换: 对于每个节点,将其左右孩子交换,再递归对其左右子树交换。 测试结果: 附:源码 #include iostream #include stdlib.h using namespace std; struct Bintree { char data; Bintree* lchild; Bintree* rchild; }; Bintree *head; int sp; /* 一棵二叉树的前序序列,建立这棵树 */ void CreateTree(Bintree *p,char a[]) { Bintree *temp; if(a[sp]!=0) { if(a[sp]==*) { p=NULL; sp++; return ; } p=new Bintree; p-data=a[sp++]; CreateTree(p-lchild,a); CreateTree(p-rchild,a); } else p=NULL; } /* 求一棵树的高度 */ int Depth(Bintree *t) { int lh , rh ; if( t == NULL ) { return 0 ; } else { lh = Depth( t-lchild ) ; rh = Depth( t-rchild ) ; return ( lh rh ? lh : rh ) + 1 ; } } /* 将二叉树的左右子树互换 */ void Exchange1(Bintree *t) { Bintree *temp; if(t) { Exchange1(t-lchild); Exchange1(t-rchild); temp=t-lchild; t-lchild=t-rchild; t-rchild=temp; } } /* 依据前序递归遍历二叉树 */ void Preorder1(Bintree *t) { if(t!=NULL) { printf(%c,t-data); Preorder1(t-lchild); Preorder1(t-rchild); } } /* 依据中序递归遍历二叉树 */ void Inorder1(Bintree *t) { if(t!=NULL) { Inorder1(t-lchild); printf(%c,t-data); Inorder1(t-rchild); } } /* 依据后序递归遍历二叉树 */ void Posorder1(Bintree *t) { if(t!=NULL) { Posorder1(t-lchild); Posorder1(t-rchild); printf(%c,t-data); } } /* 递归法求叶子结点个数 */ int Leaves_Num1(Bintree *t) { if(t) { if(t-lchild==NULLt-rchild==NULL) { return 1; } return Leaves_Num1(t-lchild

文档评论(0)

1亿VIP精品文档

相关文档