给定一颗二叉树的逻辑结构如下图,(先序遍历的结果,空树用字符‘0’表示,例如AB0C00D00),建立该二叉树的二叉链式存储结构。
编写程序输出该树的所有叶子结点和它们的父亲结点
标签:输出 width 链式 main src oid ret leaves end
给定一颗二叉树的逻辑结构如下图,(先序遍历的结果,空树用字符‘0’表示,例如AB0C00D00),建立该二叉树的二叉链式存储结构。
编写程序输出该树的所有叶子结点和它们的父亲结点
第一行输入一个整数t,表示有t个二叉树
第二行起,按照题目表示的输入方法,输入每个二叉树的先序遍历,连续输入t行
第一行按先序遍历,输出第1个示例的叶子节点
第二行输出第1个示例中与叶子相对应的父亲节点
以此类推输出其它示例的结果
#include<iostream> #include<string> using namespace std; class BiTreeNode { public: char data; BiTreeNode *Left; BiTreeNode *Right; BiTreeNode() { Left=NULL; Right=NULL; } ~BiTreeNode() { delete Left; delete Right; } }; class BiTree { public: BiTreeNode *Root; int pos; string strTree; BiTree(string str) { pos=0; strTree=str; Root=CreateBiTree(); } BiTreeNode *CreateBiTree() { char ch=strTree[pos]; pos++; if(ch==‘0‘) { return NULL; } else { BiTreeNode *T; T=new BiTreeNode(); T->data=ch; T->Left=CreateBiTree(); T->Right=CreateBiTree(); return T; } } void getleaves(BiTreeNode *p) { if(p) { if(p->Left==NULL&&p->Right==NULL) { cout<<p->data<<" "; } getleaves(p->Left); getleaves(p->Right); } } void getparents(BiTreeNode *p,BiTreeNode *parent) { if(p) { if(p->Left==NULL&&p->Right==NULL) { cout<<parent->data<<" "; } getparents(p->Left,p); getparents(p->Right,p); } } }; int main() { int T; cin>>T; while(T--) { string str; cin>>str; BiTree tree(str); tree.getleaves(tree.Root); cout<<endl; tree.getparents(tree.Root,NULL); cout<<endl; } return 0; }
标签:输出 width 链式 main src oid ret leaves end
原文地址:https://www.cnblogs.com/SZU-DS-wys/p/12180802.html