zoukankan      html  css  js  c++  java
  • 树的创建

    本课题要求递归法创建一棵树,并完成前,中,后续遍历。

    树选择用递归的方法,可以很容易做到前中后续的遍历

    创建一个树的结构体,有内容data,与左孩子和右孩子指针

    typedef struct node{
    	char data;
    	struct node *lchild;
    	struct node *rchild;
    }BTnode;
    

    创建树的函数,如果遇到#则代表无输入

    按照先左孩子,后右孩子的方式输入 

    void CreateBtree(BTnode *&T){
    	char data;
    	cin>>data;
    	T=new BTnode;
    	if(data=='#'){
    		T=NULL;
    		return ;
    	}
    	T->lchild=NULL;
    	T->rchild=NULL;
    	T->data=data;
    	CreateBtree(T->lchild);
    	CreateBtree(T->rchild);
    }
    

      前序遍历

    void PreOrder(BTnode *&T){
        if(T){
            cout<<T->data<<" ";
            PreOrder(T->lchild);
            PreOrder(T->rchild);
        }
    }

    中序遍历

    void InOrder(BTnode *&T){
    	if(T){
    		InOrder(T->lchild);
    		cout<<T->data<<" ";	
    		InOrder(T->rchild);
    	}
    }
    

      后序遍历

    void PostOrder(BTnode *&T){
    	if(T){
    		PostOrder(T->lchild);
    		PostOrder(T->rchild);
    		cout<<T->data<<" ";	
    	}
    }
    

      输入一个如图所示的二叉树

    如图输出:

    整体代码展示:

    #include<iostream>
    using namespace std;
    typedef struct node{
    	char data;
    	struct node *lchild;
    	struct node *rchild;
    }BTnode;
    void CreateBtree(BTnode *&T){
    	char data;
    	cin>>data;
    	T=new BTnode;
    	if(data=='#'){
    		T=NULL;
    		return ;
    	}
    	T->lchild=NULL;
    	T->rchild=NULL;
    	T->data=data;
    	CreateBtree(T->lchild);
    	CreateBtree(T->rchild);
    }
    void PreOrder(BTnode *&T){
    	if(T){
    		cout<<T->data<<" ";
    		PreOrder(T->lchild);
    		PreOrder(T->rchild);
    	}
    }
    void InOrder(BTnode *&T){
    	if(T){
    		InOrder(T->lchild);
    		cout<<T->data<<" ";	
    		InOrder(T->rchild);
    	}
    }
    void PostOrder(BTnode *&T){
    	if(T){
    		PostOrder(T->lchild);
    		PostOrder(T->rchild);
    		cout<<T->data<<" ";	
    	}
    }
    int main(){
    	BTnode *T;
    	CreateBtree(T);
    	cout<<"前缀遍历:"; 
    	PreOrder(T);
    	cout<<endl;
    	cout<<"中缀遍历:";
    	InOrder(T);
    	cout<<endl;
    	cout<<"后缀遍历:";
    	PostOrder(T);
    	
    } 
    

      

  • 相关阅读:
    04构建之法阅读笔记之四
    冲刺周期第十天
    冲刺周期第九天
    第二阶段冲刺--每日立会(4)
    第二阶段冲刺--每日立会(3)
    第二阶段冲刺--每日立会(2)
    第二阶段冲刺--每日立会(1)
    第十二周学习记录表
    第一阶段冲刺--每日立会(10)
    第一阶段冲刺--每日立会(9)
  • 原文地址:https://www.cnblogs.com/cxxxxxx/p/10780445.html
Copyright © 2011-2022 走看看