zoukankan      html  css  js  c++  java
  • 二叉树

    二叉树基本操作代码

    #include "stdafx.h"
    #include "stdlib.h"
    #include "string.h"
    
    #define MAX 100
    typedef char Elemtype;
    
    typedef struct BTNODE
    {
        Elemtype data;
        BTNODE *left;
        BTNODE *right;
    } BTNode;
    
    void CreateBTNode(BTNode *&root, char *str)
    {
        BTNode *p = NULL;
        BTNode *st[MAX] = {NULL};
        int top = -1;
        int i = 0;
        int k = 0;
        char ch = str[i];
    
        while ('' != ch)
        {
            switch (ch)
            {
            case '(':
                {
                    top++;
                    st[top] = p;
                    k = 1;
                    break;
                }
            case ')':
                {
                    top--;
                    break;
                }
            case ',':
                {
                    k = 2;
                    break;
                }
            default:
                {
                    p = (BTNode*)malloc(sizeof(BTNode));
                    if (NULL == p)
                    {
                        return;
                    }
                    p->data = ch;
                    p->left = p->right = NULL;
    
                    if (!root)
                    {
                        root = p;
                    } 
                    else
                    {
                        switch (k)
                        {
                        case 1:
                            st[top]->left = p;
                            break;
                        case 2:
                            st[top]->right = p;
                            break;
                        }
                    }
                    break;
                }
            }
            ch = str[++i];
        }
    }
    
    void DispBTNode(BTNode *&root)
    {
        if (root)
        {
            printf("%c", root->data);
            if (root->left || root->right)
            {
                printf("(");
                DispBTNode(root->left);
                if (root->right)
                {
                    printf(",");
                    DispBTNode(root->right);
                }
                printf(")");
            }
        }
    }
    
    int GetBTNodeDepth(BTNode *&root)
    {
        int iLeftDepth  = 0;
        int iRightDepth = 0;
    
        if (!root)
        {
            return 0;
        }
    
        iLeftDepth  = GetBTNodeDepth(root->left);
        iRightDepth = GetBTNodeDepth(root->right);
        return (iLeftDepth > iRightDepth ? (iLeftDepth+1):(iRightDepth+1));
    }
    
    void PreOrder(BTNode *&root)
    {
        if (root)
        {
            printf("%c	", root->data);
            PreOrder(root->left);
            PreOrder(root->right);
        }
    }
    
    void PreOrder1(BTNode *&root)
    {
        int top = -1;
        BTNode *p = NULL;
        BTNode *st[MAX] = {NULL};
    
        if (root)
        {
            top++;
            st[top] = root;
    
            while (top > -1)
            {
                p = st[top];
                top--;
                printf("%c	", p->data);
                if (p->right)
                {
                    top++;
                    st[top] = p->right;
                }
                if (p->left)
                {
                    top++;
                    st[top] = p->left;
                }
            }
        }
    }
    
    void InOrder(BTNode *&root)
    {
        if (root)
        {        
            PreOrder(root->left);
            printf("%c	", root->data);
            PreOrder(root->right);
        }
    }
    
    void PostOrder(BTNode *&root)
    {
        if (root)
        {        
            PreOrder(root->left);        
            PreOrder(root->right);
            printf("%c	", root->data);
        }
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        BTNode *root = NULL;
        char *str = "A(B(D(,G)),C(E,F))";
        CreateBTNode(root, str);
        DispBTNode(root);
        printf("
    ");
        printf("The BTree's Depth = %d
    ", GetBTNodeDepth(root));
    
        printf("PreOrder:
    ");
        PreOrder(root);
        printf("
    ");
    
        printf("InOrder:
    ");
        InOrder(root);
        printf("
    ");
    
        printf("PostOrder:
    ");
        PostOrder(root);
        printf("
    ");
        return 0;
    }
  • 相关阅读:
    N层电梯只停一层情况下,求所有人爬楼层数最少
    小组开发用户调研
    《哈利波特》买书最优惠算法
    团队开发——极速蜗牛
    林锐——软件工程思想后两章阅读笔记
    课堂练习之检测水军
    团队开发项目-----来用------典型用户与用户场景分析
    体验结对开发的乐趣(6)--(电梯调度问题)
    团队开发项目-----来用------用户需求调研报告
    课堂练习之最高折扣,最低优惠规划
  • 原文地址:https://www.cnblogs.com/jingmoxukong/p/3789529.html
Copyright © 2011-2022 走看看