#includeusingnamespacestd;structtree{intx;tree*left;tree*right;};inti=0;tree*Creattree*t//构建二叉树按先序输入数字,0表示空树{intxx;cin>>xx;if!xxt=NULL;else{t=newtree;t->x=xx;t->left=Creatt->left;t->right=Creatt->right;}returnt;}voidinordertree*t//中序遍历{ift{inordert->left;coutxright;}}voidCounttree*t//统计叶子结点{ift{ift->left==NULL&&t->right==NULLi++;else{Countt->left;Countt->right;}}}intmainvoid{tree*node;node=Creatnode;inordernode;cout<
连俸平2019-12-21 19:38:46
#include#includetypedefstructnode*tree_pointer;structnode{charch;tree_pointerleft_child,right_child;};tree_pointerroot=NULL;tree_pointercreatetree_pointerptr{charch;scanf"%c",&ch;ifch==''''ptr=NULL;else{ptr=tree_pointermallocsizeofnode;ptr->ch=ch;ptr->left_child=createptr->left_child;ptr->right_child=createptr->right_child;}returnptr;}voidpreordertree_pointerptr{ifptr{printf"%c",ptr->ch;preorderptr->left_child;preorderptr->right_child;}}voidinordertree_pointerptr{ifptr{inorderptr->left_child;printf"%c",ptr->ch;inorderptr->right_child;}}voidpostordertree_pointerptr{ifptr{postorderptr->left_child;postorderptr->right_child;printf"%c",ptr->ch;}}voidmain{printf"构建一个二叉树(结点数为n:";root=createroot;printf"前序遍历二叉树:";preorderroot;printf"";printf"中序遍历二叉树:";inorderroot;printf"";printf"后序遍历二叉树:";postorderroot;printf"";。
龚峻梅2019-12-21 19:14:22
答案:C。用二叉链表存储结构也就是左孩子右兄弟的存储结构。后序遍历比较合理。正常的逻辑应该就是:做好当前结点子树内部的交换,然后交换当前结点的左右子树。刚好符合后序遍历的算法逻辑。1、交换好左子树2、交换好右子树3、交换左子树与右子树其他算法如先序和按层次其逻辑都差不多,即访问当前结点时交换其左右子树。从逻辑上来看稍显别扭一点点。因此说最合适应该是后序遍历,但是从实现上来说先序和按层次都是可以的。1、交换左子树与右子树2、遍历左子树3、遍历右子树按层次遍历1、根结点入队列2、出队列,交换其左右子树,将子树的根入队列3、重复2直到队列为空中序遍历相对较难实现一些。扩展资料:树的遍历是树的一种重要的运算。树的3种最重要的遍历方式分别称为前序遍历、中序遍历和后序遍历。以这3种方式遍历一棵树时,若按访问结点的先后次序将结点排列起来,就可分别得到树中所有结点的前序列表、中序列表和后序列表。相应的结点次序分别称为结点的前序、中序和后序。遍历。
贾鹤鹏2019-12-21 18:41:15