zoukankan      html  css  js  c++  java
  • 二叉树的先序建立与遍历

    结构体的定义

    typedef struct bitnode              //定义二叉树节点数据类型 
    {
    	ElementType data;
    	struct bitnode *left, *right;
    } bitnode, *bitree;           
    
    

    函数

    先序创建二叉树

    void PerCreateTree(bitree &T) 
    { 
    	ElementType item;
    	cin >> item;
    	if( item == 0 )              //叶节点数据标志:其后根两个0 
    	    T = NULL;            //若某一节点为叶子结点,则其左右子树均为NULL,0表示建空树
    	else
    	{
    		T = new bitnode;
    		T->data = item;
    		
    	PerCreateTree(T->left);            
    	PerCreateTree(T->right);            
    	} 	                      
    }
    
    
    
    

    先序遍历二叉树

    void PerOrder(bitree T) 
    {
    	if( T )            // T != NULL 
    	{
    		cout << T->data << " ";
    		PerOrder(T->left);            
    		PerOrder(T->right);           /
    	}
    } 
    
    
    
    

    中序遍历二叉树

    void InOrder(bitree T) //
    {
    	if(T)
    	{
    		InOrder(T->left);
    		cout<<T->data<<" "; 
    		InOrder(T->right);
    	}
    }
    

    后序遍历二叉树

    void PostOrder(bitree T) 
    {
    	if(T)
    	{
    		PostOrder(T->left);
    		PostOrder(T->right);
    		cout<<T->data<<" ";
    	}
    }
    

    输入的格式

    借用大佬的二叉树示意图

    如上图所示,想输入这样一棵二叉树,应先输入根结点,再输入左结点,最后输入右结点。

    格式为:1 2 4 0 0 5 0 0 3 0 0

    最后结果如右图所示:

    以下为全部代码

    #include <iostream>
    using namespace std;
    
    typedef int ElementType;           
    typedef struct bitnode              //定义二叉树节点数据类型 
    {
    	ElementType data;
    	struct bitnode *left, *right;
    } bitnode, *bitree;         
    
    void PerCreateTree(bitree &T)  //先序创建一棵二叉树
    	{ 
    	ElementType item;
    	cin >> item;
    	if( item == 0 )              //叶节点数据标志:其后根两个0 
    	    T = NULL;            //若某一节点为叶子结点,则其左右子树均为NULL,0表示建空树
    	else
    	{
    		T = new bitnode;
    		T->data = item;
    		
    	PerCreateTree(T->left);             
    	PerCreateTree(T->right);            
    	} 
    	
    	                   
    }
    
    void PerOrder(bitree T) //先序递归遍历二叉树
    {
    	if( T )            
    	{
    		cout << T->data << " ";
    		PerOrder(T->left);            
    		PerOrder(T->right);          
    	}
    } 
     
    void InOrder(bitree T) //中序递归遍历二叉树
    {
    	if(T)
    	{
    		InOrder(T->left);
    		cout<<T->data<<" "; 
    		InOrder(T->right);
    	}
    }
    
    void PostOrder(bitree T) //后序递归遍历二叉树
    {
    	if(T)
    	{
    		PostOrder(T->left);
    		PostOrder(T->right);
    		cout<<T->data<<" ";
    	}
    }
    
    int main()
    {
    	bitree root;
    	
    
        PerCreateTree(root);              
    	 
    	cout << "先序遍历:"; 
    	PerOrder(root);             
    	cout << "
    ";
    	
    	cout << "中序遍历:"; 
    	InOrder(root);           
    	cout << "
    ";
    	
    	cout << "后序遍历:"; 
    	PostOrder(root);           
    	cout << "
    ";
    	
    	return 0;
    }
    
    
  • 相关阅读:
    DBHelper
    jsTree使用
    爬虫系列之Scrapy框架
    Mongodb安装
    爬虫系列之mongodb
    爬虫学习目录
    爬虫之selenium模块
    爬虫简介与requests模块
    爬虫数据解析的三方式
    线程相关
  • 原文地址:https://www.cnblogs.com/seerking/p/10780407.html
Copyright © 2011-2022 走看看