二叉树的基础

#include<iostream>
using namespace std;

//输入示例ab##c##
 
//定义节点
typedef struct node
{
    struct node *lchild;
    struct node *rchild;
	char data;
}BiTreeNode, *BiTree; 
   
//按照前序顺序建立二叉树
void createBiTree(BiTree &T)
{
	char c;
	cin >> c;
	if('#' == c)             //当遇到#时,令树的根节点为NULL,从而结束该分支的递归
	T = NULL;
	else
	{
		T = new BiTreeNode;
		T->data=c;
		createBiTree(T->lchild);
		createBiTree(T->rchild);
	}
}

//前序遍历二叉树并打印
void preTraverse(BiTree T)
{
    if(T)
    {
        cout<<T->data<<" ";
        preTraverse(T->lchild);
        preTraverse(T->rchild);
    }
}
//中序遍历二叉树并打印
void midTraverse(BiTree T)
{
    if(T)
    {
        preTraverse(T->lchild);
        cout<<T->data<<" ";
        preTraverse(T->rchild);
    }
}
//后序遍历二叉树并打印
void postTraverse(BiTree T)
{
    if(T)
    {
        preTraverse(T->lchild);
        preTraverse(T->rchild);
        cout<<T->data<<" ";
    }
}

int main()
{
	BiTree T;               //声明一个指向二叉树根节点的指针               
    createBiTree(T);
    cout<<"二叉树创建完成!"<<endl;
	int n;
    while(~scanf("%d",&n))
    {
    	if(n==1)
		{
    		cout<<"前序遍历二叉树:"<<endl;
    		preTraverse(T);
    		cout<<endl;
		}
		if(n==2)
		{
			cout<<"中序遍历二叉树:"<<endl;
	    	midTraverse(T);
	    	cout<<endl;	
		}
		if(n==3)
		{
			cout<<"后序遍历二叉树:"<<endl;
	    	postTraverse(T);
			cout<<endl;	
		}	
	}
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Davidmvp/article/details/83475833
今日推荐