二叉树建树与遍历模板

相关题目:

  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要用到队列

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

二叉树建树与遍历模板_第1张图片

#include
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<val<<" ";
        preTraverse(T->lchild);
        preTraverse(T->rchild);
    }
}
//中序遍历二叉树并打印
void midTraverse(tree T)
{
    if(T)
    {
        midTraverse(T->lchild);
        cout<val<<" ";
        midTraverse(T->rchild);
    }
}
//后续遍历二叉树并打印
void postTraverse(tree T)
{
    if(T)
    {
        postTraverse(T->lchild);
        postTraverse(T->rchild);
        cout<val<<" ";
    }
}
int main()
{
    tree T;               //声明一个指向二叉树根节点的指针               
    create(T);
    cout<<"二叉树创建完成"<

 

你可能感兴趣的:(算法&理论,图论,算法)