PTA 树与二叉树 3 中序+后序序列构建二叉树
作者 张鏖烽单位 湖南工程学院1根据某二叉树的后序中序遍历序列构建出这棵二叉树2输出二叉树bt中等于ch的结点的所有祖先结点3输出二叉树bt中所有单分支结点(4) 以括号表达式形式输出二叉树函数接口定义在这里描述函数接口。例如 BTNode * CreateBT_InPost(char *post,char *in,int n);//根据二叉树的后序中序遍历序列构造出这棵二叉树 bool Print_Ancestor(BTNode *b,char ch);//输出二叉树b中等于ch的节点的所有祖先节点 void Print_SingleChild(BTNode *b); //输出二叉树b的所有单分支结点 void DisplayBT(BTNode *b); //以括号表达式形式输出二叉链树其中post表示后序遍历序列的开始地址in表示中序序列的开始地址n表示遍历序列的长度ch表示从键盘输入的结点数据裁判测试程序样例在这里给出函数被调用进行测试的例子。例如 #includestdio.h #includemalloc.h #includestring.h #define MaxSize 100 typedef struct Node{ char data; struct Node *lchild,*rchild; }BTNode; BTNode * CreateBT_InPost(char *post,char *in,int n);//根据后序中序遍历序列创建二叉链树 bool Print_Ancestor(BTNode *b,char ch);//输出等于ch的节点的所有祖先节点 void Print_SingleChild(BTNode *b); //输出二叉树b的所有单分支结点 void DisplayBT(BTNode *b); //以括号表达式形式输出二叉链树 int main() { char postctr[MaxSize],Inctr[MaxSize]; char *post,*in; char ch; int n; BTNode *bt; scanf(%s,Inctr); scanf(%s,postctr); getchar(); scanf(%c,ch); postpostctr; nstrlen(postctr); inInctr; btCreateBT_InPost(post,in,n); printf(\n二叉树的括号表达式); DisplayBT(bt); printf(\n); if(!Print_Ancestor(bt,ch)) printf(\n二叉树没有等于%c的节点,ch); printf(\n二叉树的所有单分支节点); Print_SingleChild(bt); return 0; } /* 请在这里填写答案 */输入样例在这里给出一组输入。例如第1行后序遍历序列第2行中序遍历序列第3行结点数据chJGDHEBKLIFCA DJGBEHACKILF K输出样例在这里给出相应的输出。例如第1行二叉树的括号表达式第2行二叉树中等于ch的结点的所有祖先结点第3行所有单分支结点二叉树的括号表达式A(B(D(,G(J)),E(,H)),C(,F(I(K,L)))) I F C A 二叉树的所有单分支节点D G E C F参考代码BTNode*CreateBT_InPost(char*post,char*in,int n){ if(n0)return NULL; BTNode*b(BTNode*)malloc(sizeof(BTNode)); b-datapost[n-1]; int i; for(i0;in;i){ if(in[i]post[n-1])break; } b-lchildCreateBT_InPost(post,in,i); b-rchildCreateBT_InPost(posti,ini1,n-i-1); return b; } bool Print_Ancestor(BTNode*b,char ch){ if(!b)return false; if(b-datach)return true; if(Print_Ancestor(b-lchild,ch)||Print_Ancestor(b-rchild,ch)){ printf(%c ,b-data); return true; } return false; } void Print_SingleChild(BTNode*b){ if(!b)return; if((b-lchild!b-rchild)||(!b-lchildb-rchild)){ printf(%c ,b-data); } Print_SingleChild(b-lchild); Print_SingleChild(b-rchild); } void DisplayBT(BTNode*b){ if(b){ printf(%c,b-data); if(b-lchild||b-rchild){ printf((); if(b-lchild)DisplayBT(b-lchild); if(b-rchild){ printf(,); DisplayBT(b-rchild); } printf()); } } }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2412593.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!