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

      

  • 相关阅读:
    1226 倒水问题
    1230 元素查找
    2152 滑雪
    1099 字串变换 2002年NOIP全国联赛提高组
    3027 线段覆盖 2
    P2066 机器分配
    spring的作用及优势---第一个spring示例
    密码框显示提示文字
    紫薇~还记得大明湖畔的HTML5智力拼图吗?
    细说javascript函数
  • 原文地址:https://www.cnblogs.com/cxxxxxx/p/10780445.html
Copyright © 2011-2022 走看看