溫馨提示×

溫馨提示×

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

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

C++怎么實現(xiàn)二叉樹的上下顛倒

發(fā)布時間:2021-07-30 16:02:21 來源:億速云 閱讀:122 作者:chen 欄目:開發(fā)技術(shù)

這篇文章主要講解了“C++怎么實現(xiàn)二叉樹的上下顛倒”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++怎么實現(xiàn)二叉樹的上下顛倒”吧!

二叉樹的上下顛倒

這道題讓我們把一棵二叉樹上下顛倒一下,而且限制了右節(jié)點要么為空要么一定會有對應的左節(jié)點。上下顛倒后原來二叉樹的最左子節(jié)點變成了根節(jié)點,其對應的右節(jié)點變成了其左子節(jié)點,其父節(jié)點變成了其右子節(jié)點,相當于順時針旋轉(zhuǎn)了一下。對于一般樹的題都會有迭代和遞歸兩種解法,這道題也不例外,先來看看遞歸的解法。對于一個根節(jié)點來說,目標是將其左子節(jié)點變?yōu)楦?jié)點,右子節(jié)點變?yōu)樽笞庸?jié)點,原根節(jié)點變?yōu)橛易庸?jié)點,首先判斷這個根節(jié)點是否存在,且其有沒有左子節(jié)點,如果不滿足這兩個條件的話,直接返回即可,不需要翻轉(zhuǎn)操作。那么不停的對左子節(jié)點調(diào)用遞歸函數(shù),直到到達最左子節(jié)點開始翻轉(zhuǎn),翻轉(zhuǎn)好最左子節(jié)點后,開始回到上一個左子節(jié)點繼續(xù)翻轉(zhuǎn)即可,直至翻轉(zhuǎn)完整棵樹,參見代碼如下:

解法一:

class Solution {
public:
    TreeNode *upsideDownBinaryTree(TreeNode *root) {
        if (!root || !root->left) return root;
        TreeNode *l = root->left, *r = root->right;
        TreeNode *res = upsideDownBinaryTree(l);
        l->left = r;
        l->right = root;
        root->left = NULL;
        root->right = NULL;
        return res;
    }
};

下面我們來看迭代的方法,和遞歸方法相反的時,這個是從上往下開始翻轉(zhuǎn),直至翻轉(zhuǎn)到最左子節(jié)點,參見代碼如下:

解法二:

class Solution {
public:
    TreeNode *upsideDownBinaryTree(TreeNode *root) {
        TreeNode *cur = root, *pre = NULL, *next = NULL, *tmp = NULL;
        while (cur) {
            next = cur->left;
            cur->left = tmp;
            tmp = cur->right;
            cur->right = pre;
            pre = cur;
            cur = next;
        }
        return pre;
    }
};

感謝各位的閱讀,以上就是“C++怎么實現(xiàn)二叉樹的上下顛倒”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對C++怎么實現(xiàn)二叉樹的上下顛倒這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細節(jié)

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

c++
AI