1001:二叉树的操作——遍历2

1001:二叉树的操作——遍历2

Time/Memory Limit:1000 MS/32768 K 
Submitted: 69 Accepted: 47

 Problem Description

按照给定的扩展二叉树前序遍历序列建立相应的非空二叉树,要求采用二叉链表进行存储表示,并按中序次序打印叶子结点,按后序次序打印度为2的分支结点。

 Input

第一行为一个整数n,表示以下有n组数据,每组数据占一行,为扩展二叉树的前序遍历序列。

 Output

每组输出占两行,叶子结点和分支结点各占一行,每两组输出之间有一换行。

 Sample Input

3
AB#D##C##
AB##C#D##
ABD##E##C#F##

 Sample Output

DC
A

BD
A

DEF
BA
#include<iostream>
using namespace std;
struct Node{

char data; 
Node *lc,*rc;

};
	
class Tree{
public:
      Node *root;
	  Tree(){root=creat(root);}
	  
	  void InOrder(Node *p){
	  
		  if(p==NULL)
			  return;
		  else
		  {
			  InOrder(p->lc);
			if(!p->lc&&!p->rc)
				cout<<p->data;
              InOrder(p->rc);

		  }
	  }
    void PostOrder(Node *p){ 
       
		 if(p!=NULL)
	 {    
		   PostOrder(p->lc);
	         PostOrder(p->rc);
	       if(p->lc!=NULL&&p->rc!=NULL)
		   { 
             cout<<p->data;
		   }
		   
		   
		   
	 }
	return;
	  }
private:
	Node *creat(Node *p){
	    char ch;
		cin>>ch;
	    if(ch=='#')
			return NULL;
		else{
	   Node *p=new Node;p->data=ch;
	   p->lc=creat(p->lc);
	   p->rc=creat(p->rc);
		return p;
		}
		
	}

};
int main(){
   int n, flag=0;
   while(cin>>n){
	   while(n--){
	   Tree t;
	   if(flag!=0)
		   cout<<endl;
	   flag++;
	   t.InOrder(t.root);
	   cout<<endl;
	   t.PostOrder(t.root);
		   
	   cout<<endl;
	   }
   
   }

return 0;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

以码平川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值