leetcode面試題27(二叉樹的鏡像)--C語言實現

求:node

請完成一個函數,輸入一個二叉樹,該函數輸出它的鏡像。函數

例如輸入:spa

     4
   /   \
  2     7
 / \   / \
1   3 6   9
鏡像輸出:指針

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

 

示例 1:遞歸

輸入:root = [4,2,7,1,3,6,9]
輸出:[4,7,2,9,6,3,1]
 leetcode

限制:it

0 <= 節點個數 <= 1000io

注意:本題與主站 226 題相同:https://leetcode-cn.com/problems/invert-binary-tree/class

 

解:

思路:從根節點開始,分別交換樹中每個節點的左右節點的指針,遞歸調用完成後獲得的樹就是原樹的鏡像翻轉樹。分別判斷根節點爲空、根節點不空但左右節點均爲空、根節點不空但左右節點有一個爲空、根節點不空但左右節點均不爲空的狀況下,應該怎麼操做指針便可。最後返回根節點的指針。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
 
void   Mirror(  struct   TreeNode* root){
      if  (root==NULL || (root->left==NULL && root->right==NULL))    return  ;
      if  (root->left==NULL || root->right==NULL){
          if  (root->left==NULL){
            root->left = root->right;
            root->right=NULL;
        }  else  {
            root->right = root->left;
            root->left=NULL;
        }
    }
     if  (root->left!=NULL && root->right!=NULL){
         struct   TreeNode* tmp = root->right;
        root->right = root->left;
        root->left = tmp;
    }
    Mirror(root->left);
    Mirror(root->right);
}
 
struct  TreeNode* mirrorTree( struct  TreeNode* root){
     if (root==NULL)   return  root;
    Mirror(root);
     return  root;   
}
相關文章
相關標籤/搜索