二叉树的先序建立与遍历

结构体的定义

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

原文地址:https://www.cnblogs.com/seerking/p/10780407.html