程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> LeetCode:Invert Binary Tree

LeetCode:Invert Binary Tree

編輯:關於C++

 

Invert a binary tree.

     4
   /   \
  2     7
 / \   / \
1   3 6   9
to
     4
   /   \
  7     2
 / \   / \
9   6 3   1

解題思路:類似於後序遍歷的思想,遞歸的思想,先完成左子樹的交換,再完成右子樹的交換,再將根節點的左右子樹交換。

 

未優化代碼如下:

 

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
     if(root==NULL) return NULL;//當樹為一顆空樹的時候。
     if(root->left||root->right){//當節點的左右子樹至少有一個不為空的時候,必須遞歸進行交換。
         TreeNode *node=invertTree(root->left);
         root->left=invertTree(root->right);
         root->right=node;
         return root;
     }else{//當該節點左右子樹都為空的時候,沒有必要交換,直接返回該節點。
         return root;
     }
    }
};


 

之後觀看代碼可以發現,if-else語句中都有return root;區別在於if語句中對左右子樹進行了交換,而else語句中由於左右子樹都為空,沒有進行交換。

這裡,我們可以優化,認為else語句中兩棵空子樹也進行了交換,這樣就可以將if-else語句合並。

優化代碼如下:

 

    TreeNode* invertTree_recursive(TreeNode* root) {
        if (root==NULL) return root;
        TreeNode* node = invertTree_recursive(root->left);
        root->left = invertTree_recursive(root->right);
        root->right = node;
        return root;
    }


 

 

 

 

版權聲明:本文為博主原創文章,未經博主允許不得轉載。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved