• 重建二叉树


    #include <iostream>
    #define TREELEN 6
    using namespace std;
    
    typedef struct Node
    {
        char chValue;
        struct Node* pLeft;
        struct Node* pRight;
    }*PNode;
    
    void LastOrder(PNode root)
    {
        if(root==0)return;
        LastOrder(root->pLeft);
        LastOrder(root->pRight);
        cout<<root->chValue<<" ";
    }
    
    PNode ReBuild(char* pPreOrder,char* pInOrder,int nTreeLen)
    {
    
        if(nTreeLen==0)return 0;
        if(nTreeLen==1)
        {
            PNode pRoot = new Node();
            pRoot->chValue = pPreOrder[0];
            pRoot->pLeft = 0;
            pRoot->pRight = 0;
            return pRoot;
        }
        if(pPreOrder==0 || pInOrder==0)return 0;
        PNode pRoot = new Node();
        pRoot->chValue = pPreOrder[0];
        pRoot->pLeft = 0;
        pRoot->pRight = 0;
        char *pLeftEnd = pInOrder;
        int nLeftLen = 0;
        while(pLeftEnd!=0 && *pPreOrder != *pLeftEnd)
        {
            nLeftLen++;
            pLeftEnd++;
            if(nLeftLen>nTreeLen)return 0;
        }
    
        int nRightLen = nTreeLen - nLeftLen - 1;
        cout<<nLeftLen<<" "<<nRightLen<<endl;
        if(nLeftLen>0)
        {
            pRoot->pLeft = ReBuild(pPreOrder+1,pInOrder,nLeftLen);
        }
        if(nRightLen>0)
        {
            pRoot->pRight = ReBuild(pPreOrder+nLeftLen+1,pInOrder+nLeftLen+1,nRightLen);
        }
        return pRoot;
    }
    
    int main()
    {
        char szPreOrder[TREELEN]={'a','b','d','c','e','f'};
        char szInOrder[TREELEN]={'d','b','a','e','c','f'};
        PNode root = ReBuild(szPreOrder,szInOrder,TREELEN);
        LastOrder(root);
        cout<<endl;
        return 0;
    }
  • 相关阅读:
    正则表达式学习《一》
    vs2008添加模板方法
    MongoDB学习笔记《二》
    oracle存储过程错误分析
    最近一个星期的学习,比较杂乱
    C#中的委托和事件
    c++随机数字
    Delphi中的接口
    C# 泛型
    LoadString、LoadIcon和LoadCursor函数
  • 原文地址:https://www.cnblogs.com/yanglf/p/2786079.html
Copyright © 2020-2023  润新知