Skip to content

Latest commit

 

History

History
53 lines (45 loc) · 1.52 KB

226. Invert Binary Tree.md

File metadata and controls

53 lines (45 loc) · 1.52 KB

思路

翻转二叉树。

思路一

递归算法的话很简单:

  • 若为空树则返回空即可。
  • 令左子树指向翻转后的右子树,将右子树指向翻转后的左子树。

思路二

非递归算法的话类似层序遍历,因为我们要交换所有节点的左右孩子,所以我们用一个队列存放左右孩子还未交换的节点,初始为root。然后开始循环直到队列为空:出队首节点然后交换其左右孩子,然后再将其左右孩子入队(如果不为空的话)。

两个思路都相当于遍历二叉树,所以时间复杂度均为O(n),空间复杂度也均为O(n)。

C++

思路一

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if(root == NULL) return NULL;
        TreeNode *tmp = root -> left;
        root -> left = invertTree(root -> right);
        root -> right = invertTree(tmp);
        return root;
    }
};

思路二

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if(root == NULL) return NULL;
        queue<TreeNode *>q;
        q.push(root);
        
        TreeNode *p = NULL, *tmp = NULL;
        while(!q.empty()){
            p = q.front(); q.pop();
            tmp = p -> left;
            p -> left = p -> right;
            p -> right = tmp;
            if(p -> left) q.push(p -> left);
            if(p -> right) q.push(p -> right);
        }
        return root;
    }
};