• 树的创建


    树的创建

    一、总结

    一句话总结:

    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);
    	
    } 
    

      

     
  • 相关阅读:
    docker 原理之 mount namespace(下)
    docker 原理之 namespace (上)
    十种世界顶级思维方式
    Go 标准库 net
    斐波拉契序列的 Go 实现
    channel 是怎么走上死锁这条路的
    hello world 的并发实现
    使用链表和切片实现栈和队列
    非暴力沟通-读后感
    CCS
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/12927675.html
Copyright © 2020-2023  润新知