二叉树建树与遍历模板

相关题目:

  1. zcmu–4933: 二叉排序树(二叉树遍历输出)
  2. zcmu–4932: 树查找
  3. zcmu–4931: 二叉树遍历(已知先序中序二叉树重建)
  4. pta-1020 Tree Traversals(25 分)(已知后序中序求层序二叉树遍历与重建)
  5. pta-1043 Is It a Binary Search Tree(25 分)(二叉搜索树)

思路:

二叉树的建立采用递归:给定一个指向根节点的指针,然后递归调用ceate()函数,生成二叉树。

二叉树的遍历也是递归:如果节点有数据,则按照遍历规则打印根节点和孩子节点,没有数据则返回直到所有数据都遍历完,递归结束。

如果是层序遍历:https://blog.csdn.net/qq_38735931/article/details/82081966要用到队列

下面是根据前序序列来建树,‘#’表示空,注意‘#’的数量一定要足够;

《二叉树建树与遍历模板》

#include<bits/stdc++.h>
using namespace std;
//定义节点
typedef struct node{
    struct node *lchild;
    struct node *rchild;
    char val;
}node,*tree; //*tree: struct node*起了个别名,叫tree,故tree为指向节点的指针
//按前序序列建立二叉树
void create(tree &T) //&即传进节点指针的引用,括号内等价于 node* &T,目的是让传递进来的指针发生改变
{
    char c;cin>>c;
    if(c=='#')             //当遇到#时,令树的根节点为NULL,从而结束该分支的递归
    { 
	T=NULL;
        return;
    }
    else
    {
        T=new node();
        T->val=c;
        create(T->lchild);
        create(T->rchild);
    }
}
//前序遍历二叉树并打印
void preTraverse(tree T)
{
    if(T)
    {
        cout<<T->val<<" ";
        preTraverse(T->lchild);
        preTraverse(T->rchild);
    }
}
//中序遍历二叉树并打印
void midTraverse(tree T)
{
    if(T)
    {
        midTraverse(T->lchild);
        cout<<T->val<<" ";
        midTraverse(T->rchild);
    }
}
//后续遍历二叉树并打印
void postTraverse(tree T)
{
    if(T)
    {
        postTraverse(T->lchild);
        postTraverse(T->rchild);
        cout<<T->val<<" ";
    }
}
int main()
{
    tree T;               //声明一个指向二叉树根节点的指针               
    create(T);
    cout<<"二叉树创建完成"<<endl;
    cout<<"前序遍历:"<<endl;
    preTraverse(T);
    cout<<endl;
    cout<<"中序遍历:"<<endl;
    midTraverse(T);
    cout<<endl;
    cout<<"后序遍历:"<<endl;
    postTraverse(T);
    return 0;
}

 

    原文作者:hhhaaa_
    原文地址: https://blog.csdn.net/qq_38735931/article/details/82110307
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞