• 树的创建


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

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

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

      

  • 相关阅读:
    idea搭建Spring Boot+Mybatis及使用教程
    CentOS 6 安装配置JDK+tomcat环境
    关于无线路由器之间的连接
    关于链表的面试问题(判断一个单链表中是否有环)
    华为机试ACM(字符组合问题)
    Activity的启动模式
    Notification状态栏显示信息
    Java注释Override、Deprecated、SuppressWarnings
    Fragment
    Service
  • 原文地址:https://www.cnblogs.com/cxxxxxx/p/10780445.html
Copyright © 2020-2023  润新知