91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

逊克县| 吴忠市| 穆棱市| 咸阳市| 沁阳市| 鄱阳县| 长岛县| 磐石市| 汾阳市| 山阳县| 青田县| 湄潭县| 绥芬河市| 栖霞市| 渭源县| 灌云县| 江口县| 苗栗县| 鸡东县| 福州市| 浦县| 万山特区| 乌鲁木齐县| 阿拉善左旗| 衡阳县| 英超| 鲜城| 中西区| 加查县| 贵阳市| 鹰潭市| 崇明县| 杂多县| 黄山市| 志丹县| 金乡县| 绥棱县| 若尔盖县| 安平县| 临夏市| 西盟|