二叉树(二)打印输出二叉树中的叶子结点
采用先序法建立一棵二叉树,设计按先序输出二叉树的叶子,二叉树的数据域类型为字符型,扩展二叉树的叶子结点用‘#’表示,要求可以输出多棵二叉树的叶子结点,当二叉树为空时程序结束。
输入描述:
循环输入多棵扩展二叉树的先序遍历序列,每棵树占一行,以回车结束,每棵二叉树中结点之间以空格隔开
输出描述:
输出各二叉树中的叶子结点,每次输出后面都换行,当二叉树为空时,输出“NULL”,程序结束
输入样例:
A B # # C D # E # F # # G H # I K # # # # A B D H # # I # # E J # # K # # C F L # # M # # G N # # O # # #
输出样例:
B F K H I J K L M N O NULL
#include <iostream> using namespace std; struct BiNode { char data; BiNode *lchild, *rchild; }; class BiTree { public: BiTree() { root = creat(root); } void PreOrder() { PreOrder(root); } void PostOrder() { PostOrder(root); } void InOrder() { InOrder(root); } void LeverOrder() { LeverOrder(root); } int null() { int i = null(root); return i; } private: BiNode *root; BiNode *creat(BiNode *bt); void PreOrder(BiNode *bt); void InOrder(BiNode *bt); void PostOrder(BiNode *bt); void LeverOrder(BiNode *bt); int null(BiNode *bt); }; BiNode *BiTree::creat(BiNode *bt) { char ch; cin >> ch; if(ch == #)bt = NULL; else { bt = new BiNode; bt->data = ch; bt->lchild = creat(bt->lchild); bt->rchild = creat(bt->rchild); } return bt; } int BiTree::null(BiNode *bt) { if(bt == NULL) { return 1; } else { return 0; } } void BiTree::PreOrder(BiNode *bt) { if(bt == NULL) return; else { if(bt->lchild == NULL&&bt->rchild == NULL) { cout << bt->data << " "; } PreOrder(bt->lchild); PreOrder(bt->rchild); } } void BiTree::InOrder(BiNode *bt) { if(bt == NULL) return; else { InOrder(bt->lchild); cout <<bt->data << " "; InOrder(bt->rchild); } } void BiTree::PostOrder(BiNode *bt) { if(bt == NULL) return; else { PostOrder(bt->lchild); PostOrder(bt->rchild); cout <<bt->data << " "; } } void BiTree::LeverOrder(BiNode *q) { int front,rear; BiNode *Q[20]; front = rear = -1; if(root == NULL)return; Q[++rear] = root; while(front!=rear) { q = Q[++front]; cout << q->data << " "; if(q->lchild!=NULL) Q[++rear] = q->lchild; if(q->rchild!=NULL) Q[++rear] = q->rchild; } } int main() { while(1) { BiTree T; int i = T.null(); if(i == 1) { cout << "NULL" << endl ; break; } else { T.PreOrder(); } cout << endl; } return 0; }
下一篇:
统计各位数字都不同的数字个数