zoukankan      html  css  js  c++  java
  • 二叉树的建立与先序,后序,中序输出

    如果二叉树为:

                                  a

                 b                                 c

                         d                                 e

    由于程序中要知道叶子结点(终点)。所以要讲上面的二叉树变成扩展二叉树(把叶子结点的孩子补成#,用作标记),扩展后就变成了:

                                        a

                        b                                 c

              #                  d              #                e

                           #             #                   #          #

    那么在输入的时候,须要输入ab#d##c#e##(输入后直接回车就可以)

    #include <stdio.h>
    #include<stdlib.h>
    #define ElemType char
    //节点声明,数据域、左孩子指针、右孩子指针
    typedef struct BiTNode{
    char data;
    struct BiTNode *lchild, *rchild;
    }BiTNode, *BiTree;
    BiTree createBiTree()

    BiTree T;
    char ch;
    scanf("%c", &ch);
    if (ch == '#')
    T = NULL;
    else
    {
    T = (BiTree)malloc(sizeof(BiTNode));
    T->data = ch;
    T->lchild = createBiTree();
    T->rchild = createBiTree();
    }
    return T;

    }

    以下就是二叉树的遍历。遍历是通过递归进行遍历

    //先序遍历
    void PreorderTraverse(BiTree T)
    {
    if (T)
    {
    printf("%c ", T->data);
    PreorderTraverse(T->lchild);

    PreorderTraverse(T->rchild);
    }
    }
    //中序遍历
    void InorderTraverse(BiTree T)
    {
    if (T)
    {

    PreorderTraverse(T->lchild);
    printf("%c ", T->data);
    PreorderTraverse(T->rchild);
    }
    }
    //后序遍历
    void PostorderTraverse(BiTree T)
    {
    if (T)
    {
    PreorderTraverse(T->lchild);
    PreorderTraverse(T->rchild);
    printf("%c ", T->data);
    }

    }

    二叉树高度的求法返回T所指向的二叉树的高度

    处理方法:1.若T为空则返回0否则

                    2.求出左右子树的高度L1和L2。并返回两者之中最大的。

                    3.由于没有算根节点仅仅是求的左右子树。所以须要加1。

    int dep(BiTree T)
    {
    int max;
    if (T == NULL)
    return 0;
    else
    {
    max = dep(T->lchild);
    if (dep(T->rchild) > max)
    max = dep(T->rchild);

    }
    return max + 1;
    }

    int main(void)
    {
    int ch;
    BiTree T;
    printf("请利用先序插入法插入您要建立的二叉树! ");
    T = createBiTree();
    while (1)
    {
    printf("按下列选项选择您要进行的操作 ");
    printf("1前序输出. ");
    printf("2.后序输出 ");
    printf("3.中序输出 ");
    printf("4.退出 ");
    scanf("%d", &ch);
    switch (ch)
    {
    case 1:
    PreorderTraverse(T); break;
    case 2:
    PostorderTraverse(T); break;
    case 3:
    InorderTraverse(T); break;
    case 4:
    return 0;
    default:
    break;
    }


    }
    return 0;
        

    }





    以下是我做的一点点改进,利用c++中的指针引用将问题进行了简单的改动。以下是基本的两个函数。就是BST树的构建函数以及主函数

    构建函数


    这样的方法不须要返回值了,是直接对指针进行操作。


    主函数的写法



  • 相关阅读:
    Part 3:视图和模板--Django从入门到精通系列教程
    Part 2:模型与后台管理admin站点--Django从入门到精通系列教程
    Part 1:请求与响应--Django从入门到精通系列教程
    java的static关键字
    接口
    final关键字
    抽象类
    动态绑定多态
    对象转型2
    对象转型1
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6850431.html
Copyright © 2011-2022 走看看