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

溫馨提示×

溫馨提示×

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

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

C++怎么實現二叉樹的上下顛倒

發布時間:2021-07-30 16:02:21 來源:億速云 閱讀:124 作者:chen 欄目:開發技術

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

二叉樹的上下顛倒

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

解法一:

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;
    }
};

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

解法二:

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++怎么實現二叉樹的上下顛倒”的內容了,經過本文的學習后,相信大家對C++怎么實現二叉樹的上下顛倒這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

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

c++
AI

贞丰县| 天津市| 台湾省| 安达市| 义马市| 奉贤区| 沙雅县| 清丰县| 大方县| 临沂市| 罗平县| 正蓝旗| 玉环县| 理塘县| 虹口区| 双牌县| 乃东县| 商洛市| 库车县| 称多县| 岫岩| 乳源| 公主岭市| 东方市| 天峨县| 宜君县| 乡城县| 凤城市| 台北市| 固始县| 阿勒泰市| 香格里拉县| 泉州市| 临汾市| 雷山县| 灌云县| 礼泉县| 额尔古纳市| 天峨县| 永年县| 庐江县|