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

    3、二叉树的建立

       如果要在内存中建立一个如下左图这样的树,wield能让每个结点确认是否有左右孩子,我们对它进行扩展,变成如下右图的样子,也就是将二叉树中的每个结点的空指针引出一个虚结点,其值为一个特定值,比如#,称之为扩展二叉树。扩展二叉树就可以做到一个遍历序列确定一棵二叉树了。如前序遍历序列为AB#D##C##。

        有了这样的准备,就可以看看如何生成一棵二叉树了。假设二叉树的结点均为一个字符,把刚才前序遍历序列AB#D##C##用键盘挨个输入,实现的算法如下所示。

    #include <cstdio>
    #include <cstdlib>
    //#define _OJ_
    typedef struct tree
    {
        char data;
        struct tree *lchild;
        struct tree *rchild;
    } tree, *bitree;

    /*bitree
    init_tree(void)
    {
        bitree T;
        T = (bitree) malloc (sizeof(tree));
        T->lchild = NULL;
        T->rchild = NULL;
    }*/

    bitree
    creat_tree(bitree T)
    {
        char ch;
        scanf("%c", &ch);
        if(ch == '#')
            T = NULL;
        else
        {
        T = (bitree) malloc (sizeof(tree));
        T->data = ch;
        T->lchild = creat_tree(T->lchild);
        T->rchild = creat_tree(T->rchild);
        }
        //同理可得中,后序创立二叉树只要把以上三个操作换一下顺序而已!!!
        return T;
    }

    void
    trverse(bitree T)
    {
        if(T)
        {
        printf("%c ", T->data);
        trverse(T->lchild);
        trverse(T->rchild);
        }//同理可得中,后序遍历二叉树只要把以上三个操作换一下顺序而已!!!
    }

    int main(int argc, char const *argv[]) {
    #ifndef _OJ_  //ONLINE_JUDGE
        freopen("input.txt", "r", stdin);
    #endif


        bitree T;
        T = creat_tree(T);
        trverse(T);
        return 0;
    }

  • 相关阅读:
    源码
    Leetcode 230. 二叉搜索树中第K小的元素 中序遍历
    Leetcode 160. 相交链表 哈希 链表
    Leetcode 142. 环形链表 II
    Leetcode 217. 存在重复元素 哈希 排序
    asp.mvc2.0资料
    关于CRM的介绍
    WPf控件模板缺省样式
    皮肤制作工具
    关于linq的用法
  • 原文地址:https://www.cnblogs.com/airfand/p/4947465.html
Copyright © 2011-2022 走看看