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

    树的创建

    一、总结

    一句话总结:

    a、树的创建可以拿层次遍历序列(用队列)来创建,也可以先序序列(用递归)来创建
    b、树的遍历就是递归,先序(根左右)、中序(左根右)、后序(左右根)

    二、树的创建

    转自或参考:树的创建
    https://www.cnblogs.com/cxxxxxx/p/10780445.html

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

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

    创建一个树的结构体,有内容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);
    	
    } 
    

      

     
  • 相关阅读:
    第四章
    第三章随手笔记
    Android深度探索(卷1)HAL与驱动开发
    第十章心得体会
    第九章心得体会
    第八章心得体会
    第六章心得体会
    第七章心得体会
    第五章心得体会
    第四章心得体会
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/12927675.html
Copyright © 2011-2022 走看看