亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java二叉樹怎么根據前序和中序推出后續

發布時間:2021-12-08 14:13:37 來源:億速云 閱讀:163 作者:iii 欄目:大數據

本篇內容介紹了“Java二叉樹怎么根據前序和中序推出后續”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

根據前序跟中序 => 后序

Java二叉樹怎么根據前序和中序推出后續

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
struct BTreeNode
{
    int _value;
    BTreeNode*_left;
    BTreeNode*_right;
};

//解法一
BTreeNode* RebuildCode(int * PreStart, int *PreEnd, int *InStart, int *InEnd)
{
    BTreeNode *root = new BTreeNode();
    //新建節點root保存前序第一個節點為根結點
    root->_value = PreStart[0];
    root-> _left = NULL;
    root->_right  = NULL;
    if(InStart == InEnd && *InStart == *InEnd)
    {
        return root;
    }
    //據此節點找到中序遍歷此節點的位置
    int *rootIn = InStart;
    while(*PreStart != *rootIn)
    {
        rootIn++;
    }
    //左子樹的長度
    int leftlen = rootIn-InStart;
    //重建左子樹
    if(leftlen > 0)
    {
        root->_left = RebuildCode( PreStart+1, PreStart+leftlen, InStart,InStart+leftlen-1);
    }
    //重建右子樹
    if(InStart+leftlen < InEnd)
    {
        root->_right = RebuildCode( PreStart+leftlen+1, PreEnd,InStart+leftlen+1, InEnd);

    }
    return root;
}
BTreeNode* RebuildTree(int *PreOrder, int *InOrder, int len)
{
    //首先判斷邊界條件
    if(PreOrder == NULL || InOrder == NULL || len <= 0)
    {
        return NULL;
    }
    else
    {
        return RebuildCode(PreOrder, PreOrder+len-1, InOrder, InOrder+len-1);
    }
}
//后序遍歷輸出二叉樹序列
void PostOrder(BTreeNode *root)
{
    if(root->_left != NULL)
    {
        PostOrder(root->_left);
    }
     if(root->_right != NULL)
    {
        PostOrder(root->_right);
    }
    if(root != NULL)
    {
        cout<<root->_value<<" ";
    }
}
int main()
{
    int  PreOrder[8] = {1,2,4,7,3,5,6,8};
    int  InOrder[8] = {4,7,2,1,5,3,8,6};
    PostOrder(RebuildTree(PreOrder, InOrder, 8));
    cout<<endl;
    return 0;
}


根據后序跟中序 =>前序

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
struct BTreeNode
{
    int _value;
    BTreeNode*_left;
    BTreeNode*_right;
};

//解法一
BTreeNode* RebuildCode(int * PostStart, int *PostEnd, int *InStart, int *InEnd)
{
    BTreeNode *root = new BTreeNode();
    //新建節點root保存前序第一個節點為根結點
    root->_value = PostEnd[0];
    root-> _left = NULL;
    root->_right  = NULL;
    if(InStart == InEnd && *InStart == *InEnd)
    {
        return root;
    }
    //據此節點找到中序遍歷此節點的位置
    int *rootIn = InStart;
    while(*PostEnd != *rootIn)
    {
        rootIn++;
    }
    //左子樹的長度
    int leftlen = rootIn-InStart;
    //重建左子樹
    if(leftlen > 0)
    {
        root->_left = RebuildCode( PostStart, PostStart+leftlen-1, InStart,InStart+leftlen-1);
    }
    //重建右子樹
    if(InStart+leftlen < InEnd)
    {
        root->_right = RebuildCode( PostStart+leftlen, PostEnd-1, InStart+leftlen+1, InEnd);

    }
    return root;
}
BTreeNode* RebuildTree(int *PostOrder, int *InOrder, int len)
{
    //首先判斷邊界條件
    if(PostOrder == NULL || InOrder == NULL || len <= 0)
    {
        return NULL;
    }
    else
    {
        return RebuildCode(PostOrder, PostOrder+len-1, InOrder, InOrder+len-1);
    }
}
//后序遍歷輸出二叉樹序列
void PreOrder(BTreeNode *root)
{
    if(root != NULL)
    {
        cout<<root->_value<<" ";
    }
    if(root->_left != NULL)
    {
        PreOrder(root->_left);
    }
     if(root->_right != NULL)
    {
        PreOrder(root->_right);
    }
}
int main()
{
    int  PostOrder[8] = {7,4,2,5,8,6,3,1};
    int  InOrder[8] = {4,7,2,1,5,3,8,6};
    PreOrder(RebuildTree(PostOrder, InOrder, 8));
    cout<<endl;
    return 0;
}

“Java二叉樹怎么根據前序和中序推出后續”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

城市| 家居| 江口县| 敦煌市| 伊川县| 鸡西市| 榆中县| 手游| 彰化县| 永春县| 阜康市| 松江区| 白玉县| 萝北县| 丹巴县| 水富县| 棋牌| 福海县| 台南县| 西安市| 六枝特区| 莎车县| 壤塘县| 江西省| 盖州市| 玛多县| 清丰县| 萝北县| 镇原县| 宁远县| 灯塔市| 武定县| 双鸭山市| 峨边| 当阳市| 陈巴尔虎旗| 吐鲁番市| 剑阁县| 高雄县| 姜堰市| 武鸣县|