最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++求解二叉樹的下一個(gè)結(jié)點(diǎn)問題

 更新時(shí)間:2022年04月01日 11:35:25   作者:翟天保Steven  
本文將通過C++求解以下問題:給定一個(gè)二叉樹其中的一個(gè)結(jié)點(diǎn),請(qǐng)找出中序遍歷順序的下一個(gè)結(jié)點(diǎn)并且返回。文中示例代碼講解詳細(xì),感興趣的可以了解一下

題目描述

給定一個(gè)二叉樹其中的一個(gè)結(jié)點(diǎn),請(qǐng)找出中序遍歷順序的下一個(gè)結(jié)點(diǎn)并且返回。注意,樹中的結(jié)點(diǎn)不僅包含左右子結(jié)點(diǎn),同時(shí)包含指向父結(jié)點(diǎn)的next指針。下圖為一棵有9個(gè)節(jié)點(diǎn)的二叉樹。樹中從父節(jié)點(diǎn)指向子節(jié)點(diǎn)的指針用實(shí)線表示,從子節(jié)點(diǎn)指向父節(jié)點(diǎn)的用虛線表示

示例:

輸入:{8,6,10,5,7,9,11},8

返回:9

解析:這個(gè)組裝傳入的子樹根節(jié)點(diǎn),其實(shí)就是整顆樹,中序遍歷{5,6,7,8,9,10,11},根節(jié)點(diǎn)8的下一個(gè)節(jié)點(diǎn)就是9,應(yīng)該返回{9,10,11},后臺(tái)只打印子樹的下一個(gè)節(jié)點(diǎn),所以只會(huì)打印9,如下圖,其實(shí)都有指向左右孩子的指針,還有指向父節(jié)點(diǎn)的指針,下圖沒有畫出來

數(shù)據(jù)范圍:節(jié)點(diǎn)數(shù)滿足1≤n≤50  ,節(jié)點(diǎn)上的值滿足1≤val≤100 

要求:空間復(fù)雜度 O(1)  ,時(shí)間復(fù)雜度 O(n) 

示例:

輸入:

{8,6,10,5,7,9,11},8

返回值:

9

解題思路

本題考察數(shù)據(jù)結(jié)構(gòu)樹的使用。兩個(gè)方法:

1)暴力破解。通過next指針獲取根結(jié)點(diǎn),對(duì)其進(jìn)行中序排序,排序過程中用vector存儲(chǔ),然后直接根據(jù)位置輸出即可。

2)結(jié)合中序排序性質(zhì)。若某個(gè)結(jié)點(diǎn)存在右子樹,則右子樹的最左孩子就是它的下一個(gè)結(jié)點(diǎn);若不存在右子樹,則它的第一個(gè)右父親,就是它的下一個(gè)結(jié)點(diǎn)。

測(cè)試代碼

1)暴力破解

/*
struct TreeLinkNode {
    int val;
    struct TreeLinkNode *left;
    struct TreeLinkNode *right;
    struct TreeLinkNode *next;
    TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {
        
    }
};
*/
class Solution {
public:
    TreeLinkNode* GetNext(TreeLinkNode* pNode) {
        if(!pNode)
            return NULL;
        // 確定根結(jié)點(diǎn)
        TreeLinkNode* root=pNode;
        while(root->next)
        {
            root=root->next;
        }
        // 中序排序
        vector<TreeLinkNode*> v;
        inorder(root,v);
        for(int i=0;i<v.size();++i)
        {
            if(v[i]==pNode&&(i+1)<v.size())
                return v[i+1];
        }
        return NULL;
    }
    
    // 排序
    void inorder(TreeLinkNode* root,vector<TreeLinkNode*> &v)
    {
        if(!root)
            return;
        // 中序排序
        inorder(root->left,v);
        v.push_back(root);
        inorder(root->right,v);
    }
};

2)結(jié)合中序排序性質(zhì)

/*
struct TreeLinkNode {
    int val;
    struct TreeLinkNode *left;
    struct TreeLinkNode *right;
    struct TreeLinkNode *next;
    TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {
        
    }
};
*/
class Solution {
public:
    TreeLinkNode* GetNext(TreeLinkNode* pNode) {
        if(!pNode)
            return NULL;
        // 判斷是否存在右子樹
        if(pNode->right)
        {
            TreeLinkNode* target=pNode->right;
            // 取最左孩子
            while(target->left)
            {
                target=target->left;
            }
            return target;
        }
        // 不存在右子樹,尋找第一個(gè)右父親
        while(pNode->next)
        {
            if(pNode->next->left==pNode)
                return pNode->next;
            pNode=pNode->next;
        }
        return NULL;
    }
    
 
};

到此這篇關(guān)于C++求解二叉樹的下一個(gè)結(jié)點(diǎn)問題的文章就介紹到這了,更多相關(guān)C++二叉樹內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言員工業(yè)績銷售源代碼

    C語言員工業(yè)績銷售源代碼

    這篇文章主要為大家詳細(xì)介紹了C語言員工業(yè)績銷售源代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • C++構(gòu)造和解析Json的使用示例

    C++構(gòu)造和解析Json的使用示例

    今天小編就為大家分享一篇關(guān)于C++構(gòu)造和解析Json的使用示例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • C++實(shí)現(xiàn)LeetCode(71.簡化路徑)

    C++實(shí)現(xiàn)LeetCode(71.簡化路徑)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(71.簡化路徑),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 數(shù)據(jù)結(jié)構(gòu)之矩陣行列和相等的實(shí)例

    數(shù)據(jù)結(jié)構(gòu)之矩陣行列和相等的實(shí)例

    這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之矩陣行列和相等的實(shí)例的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • C++實(shí)現(xiàn)LeetCode(14.最長共同前綴)

    C++實(shí)現(xiàn)LeetCode(14.最長共同前綴)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(14.最長共同前綴),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++實(shí)現(xiàn)線性代數(shù)矩陣行簡化

    C++實(shí)現(xiàn)線性代數(shù)矩陣行簡化

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)線性代數(shù)矩陣行簡化,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Objective-C的內(nèi)省(Introspection)用法小結(jié)

    Objective-C的內(nèi)省(Introspection)用法小結(jié)

    這篇文章主要介紹了Objective-C的內(nèi)省(Introspection)用法,這是面向?qū)ο笳Z言和環(huán)境的一個(gè)強(qiáng)大特性,需要的朋友可以參考下
    2014-07-07
  • C++中的異常實(shí)例詳解

    C++中的異常實(shí)例詳解

    異常處理是C++的一項(xiàng)語言機(jī)制,用于在程序中處理異常事件,下面這篇文章主要給大家介紹了關(guān)于C++中異常的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • C++野指針的具體實(shí)現(xiàn)

    C++野指針的具體實(shí)現(xiàn)

    野指針就是指針指向的不是一個(gè)有效(合法)的地址,本文主要介紹了C++野指針的具體實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • C語言實(shí)現(xiàn)字符轉(zhuǎn)unix時(shí)間戳的簡單實(shí)例

    C語言實(shí)現(xiàn)字符轉(zhuǎn)unix時(shí)間戳的簡單實(shí)例

    下面小編就為大家?guī)硪黄狢語言實(shí)現(xiàn)字符轉(zhuǎn)unix時(shí)間戳的簡單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06

最新評(píng)論

鄂尔多斯市| 桃园市| 大英县| 宜城市| 忻州市| 郯城县| 徐汇区| 十堰市| 京山县| 平原县| 清徐县| 盐山县| 成安县| 莎车县| 山阳县| 麟游县| 融水| 平山县| 九龙城区| 扎赉特旗| 平陆县| 驻马店市| 永吉县| 中西区| 陆良县| 石柱| 孝感市| 仲巴县| 平邑县| 西贡区| 邳州市| 葵青区| 大同县| 长葛市| 曲阳县| 保靖县| 深水埗区| 四子王旗| 友谊县| 昭通市| 乌什县|