DS二叉树--二叉树之父子结点
Posted liu269393
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
在递归遍历的时候传入父节点的data,若判断为叶子节点则将该data入队
#include<iostream> #include<queue> #include<string> using namespace std; class BitreeNode { public: char data; BitreeNode *left; BitreeNode *right; BitreeNode() :left(NULL), right(NULL) {} ~BitreeNode() {} }; class Bitree { private: BitreeNode *Root; int pos; string strtree; BitreeNode *CreateBitree(); void countleaves(BitreeNode *t,char fatherdata); public: queue<char> q; Bitree() {}; ~Bitree() {}; void CreateTree(string TreeArray); void countleaves(); }; void Bitree::CreateTree(string treearray) { pos = 0; strtree.assign(treearray); Root = CreateBitree(); } BitreeNode *Bitree::CreateBitree() { BitreeNode *T; char ch; ch = strtree[pos++]; if (ch == ‘0‘) T = NULL; else { T = new BitreeNode(); T->data = ch; T->left = CreateBitree(); T->right = CreateBitree(); } return T; } void Bitree::countleaves() { pos = 0; countleaves(Root,Root->data); cout << endl; while (!q.empty()) { cout << q.front()<<" "; q.pop(); } cout << endl; } void Bitree::countleaves(BitreeNode *t,char fatherdata) { if (t) { if (!t->left && !t->right) { cout << t->data << " "; q.push(fatherdata); } countleaves(t->left,t->data); countleaves(t->right,t->data); } } int main() { int t; cin >> t; while (t--) { string str; cin >> str; Bitree *tree; tree = new Bitree(); tree->CreateTree(str); tree->countleaves(); } }
以上是关于DS二叉树--二叉树之父子结点的主要内容,如果未能解决你的问题,请参考以下文章