7劍指OFFER之重建2叉樹

參考資料:

[1]見(jiàn)本頁(yè)標(biāo)準(zhǔn)答案

思路:

重建二叉樹分為重建左子樹、重建右子樹

自己的解答:
struct BinaryTreeNode{
    int m_nKey;
    BinaryTreeNode* m_pLeft;
    BinaryTreeNode* m_pRight;
    
    BinaryTreeNode(int nVal) :m_nKey(nVal), m_pLeft(nullptr), m_pRight(nullptr)
    {}
};


//重建二叉樹

BinaryTreeNode* ReConstructBinaryTree(vector<int> pre,vector<int> vin)
{
    if (pre.size() <= 0)
        return nullptr;

    BinaryTreeNode* pHead = new BinaryTreeNode(pre[0]);


    //找到中序遍歷的根節(jié)點(diǎn)
    //找到左子樹的前序遍歷和中序遍歷
    //找到右子樹的前序遍歷和中序遍歷
    //重建左子樹和重建右子樹
    
    //找到中序遍歷的根節(jié)點(diǎn)
    int nVinRoot = 0;
    for (int i = 0; i < vin.size(); i++)
    {
        if (vin[i] == pre[0])
        {
            nVinRoot = i;
            break;
        }
    }

    vector<int> vecPreLeft, vecVinLeft;
    vector<int> vecPreRight,vecVinRight;

    //找到左子樹的前序遍歷和中序遍歷
    //找到右子樹的前序遍歷和中序遍歷
    for (int i = 0; i < nVinRoot; i++)
    {
        vecPreLeft.push_back(pre[i+1]);
        vecVinLeft.push_back(vin[i]);
    }

    for (int j = nVinRoot+1; j < pre.size(); j++)
    {
        vecPreRight.push_back(pre[j]);
        vecVinRight.push_back(vin[j]);
    }

    //重建左子樹和重建右子樹
    pHead->m_pLeft = ReConstructBinaryTree(vecPreLeft,vecVinLeft);
    pHead->m_pRight = ReConstructBinaryTree(vecPreRight,vecVinRight);
    
    return pHead;
}
標(biāo)準(zhǔn)答案:
/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
        
        if(vin.size()<=0)
            return nullptr;
        
        //前序遍歷第一個(gè)節(jié)點(diǎn)為根節(jié)點(diǎn)
        TreeNode* head = new TreeNode(pre[0]);
        
        //找到中序遍歷中根節(jié)點(diǎn)所在的位置
        int gen;
        for(int i = 0;i <vin.size();i++)
        {
            if(pre[0] == vin[i])
            {
                gen =i;
                break;
            }
        }
        //前序遍歷左子樹,前序遍歷右子樹呐籽,中序遍歷左子樹,中序遍歷右子樹
        vector<int> left_pre,right_pre;
        vector<int> left_vin, right_vin;
        
        //將前序遍歷左子樹放入前序遍歷左子樹中,將中序遍歷左子樹放入中序遍歷左子樹中 
        for(int i =0;i<=gen-1;i++)
        {
            left_vin.push_back(vin[i]);
            left_pre.push_back(pre[i+1]);
        }
        //將前序遍歷右子樹放入前序遍歷右子樹中挫鸽,將中序遍歷右子樹放入中序遍歷右子樹中
        for(int i =gen+1;i<vin.size();i++)
        {
            right_vin.push_back(vin[i]);
            right_pre.push_back(pre[i]);
        }
        
        head->left = reConstructBinaryTree(left_pre,left_vin);
        head->right = reConstructBinaryTree(right_pre,right_vin);
        
        return head;
    }
};

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鸥跟,隨后出現(xiàn)的幾起案子丢郊,更是在濱河造成了極大的恐慌,老刑警劉巖医咨,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件枫匾,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡拟淮,警方通過(guò)查閱死者的電腦和手機(jī)干茉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)很泊,“玉大人角虫,你說(shuō)我怎么就攤上這事∥欤” “怎么了戳鹅?”我有些...
    開封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)昏兆。 經(jīng)常有香客問(wèn)我枫虏,道長(zhǎng),這世上最難降的妖魔是什么爬虱? 我笑而不...
    開封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任隶债,我火速辦了婚禮,結(jié)果婚禮上跑筝,老公的妹妹穿的比我還像新娘死讹。我一直安慰自己,他們只是感情好曲梗,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開白布回俐。 她就那樣靜靜地躺著逛腿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪仅颇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天碘举,我揣著相機(jī)與錄音忘瓦,去河邊找鬼。 笑死引颈,一個(gè)胖子當(dāng)著我的面吹牛耕皮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蝙场,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼凌停,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了售滤?” 一聲冷哼從身側(cè)響起罚拟,我...
    開封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎完箩,沒(méi)想到半個(gè)月后赐俗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弊知,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年阻逮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秩彤。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡叔扼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出漫雷,到底是詐尸還是另有隱情瓜富,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布珊拼,位于F島的核電站食呻,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏澎现。R本人自食惡果不足惜仅胞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望剑辫。 院中可真熱鬧干旧,春花似錦、人聲如沸妹蔽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至编整,卻和暖如春舔稀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背掌测。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工内贮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人汞斧。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓夜郁,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親粘勒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子竞端,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 題目:輸入某二叉樹的前序遍歷和中序遍歷的結(jié)果,請(qǐng)重建出該二叉樹庙睡。假設(shè)輸入的前序遍歷和中序遍歷的結(jié)果中都不含重復(fù)的數(shù)...
    minningl閱讀 151評(píng)論 0 0
  • 輸入某二叉樹的前序遍歷和中序遍歷的結(jié)果事富,請(qǐng)重建出該二叉樹。假設(shè)輸入的前序遍歷和中序遍歷的結(jié)果中都不含重復(fù)的數(shù)字埃撵。例...
    zheng7閱讀 141評(píng)論 0 0
  • 題目:輸入某二叉樹的前序遍歷和中序遍歷的結(jié)果赵颅,請(qǐng)重建出該二叉樹。 解法:前序遍歷:根左右中序遍歷:左根右后續(xù)遍歷:...
    qmss閱讀 78評(píng)論 0 0
  • 你有為了夢(mèng)想和你的父母大吵大鬧嗎暂刘?我沒(méi)有過(guò)饺谬,所以一直想知道那是種什么樣的感覺(jué)。 我好像一直都習(xí)慣于壓抑自己的情緒谣拣,...
    愛(ài)吃巧克力的泡芙閱讀 214評(píng)論 0 1
  • 其實(shí),無(wú)論古詩(shī)贵涵,還是新詩(shī)列肢,最后的結(jié)局都是消亡。 很簡(jiǎn)單的宾茂,莎士比亞的戲劇瓷马,在英國(guó),除了專業(yè)人員跨晴,能夠看懂劇本的年輕...
    真老實(shí)人_425a閱讀 527評(píng)論 3 6