DS二叉树——二叉树之父子结点
Posted szu-ds-wys
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DS二叉树——二叉树之父子结点相关的知识,希望对你有一定的参考价值。
题目描述
给定一颗二叉树的逻辑结构如下图,(先序遍历的结果,空树用字符‘0’表示,例如AB0C00D00),建立该二叉树的二叉链式存储结构。
编写程序输出该树的所有叶子结点和它们的父亲结点
输入
第一行输入一个整数t,表示有t个二叉树
第二行起,按照题目表示的输入方法,输入每个二叉树的先序遍历,连续输入t行
输出
第一行按先序遍历,输出第1个示例的叶子节点
第二行输出第1个示例中与叶子相对应的父亲节点
以此类推输出其它示例的结果
样例输入
3 AB0C00D00 AB00C00 ABCD0000EF000
样例输出
C D B A B C A A D F C E
提示
#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; }
以上是关于DS二叉树——二叉树之父子结点的主要内容,如果未能解决你的问题,请参考以下文章