LeetCode 226 翻转二叉树 HERODING的LeetCode之路

翻转一棵二叉树。

示例:

输入:

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

输出:

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

备注:
这个问题是受到 Max Howell 的 原问题 启发的 :

谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。

解题思路:
可以是这是一道广度优先算法题目,利用广度优先算法可以更加清晰快速得到结果,其实就是逐层交换左右节点,直到没有节点,实现方式是用队列实现,代码如下:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
    
    
public:
    TreeNode* invertTree(TreeNode* root) {
    
    
        if(!root || (!root->left && !root->right)){
    
    
            return root;//如果根为空或者根只有一个,那么不用翻转,直接返回
        }
        queue<TreeNode*> q;
        q.push(root);
        while(!q.empty()){
    
    
            for(int i = 0; i < q.size(); i ++){
    
    
                TreeNode* tree = q.front();//取出队列的头
                q.pop();
                //交换左右节点
                TreeNode* demo = tree->left;
                tree->left = tree->right;
                tree->right = demo;
                //把左右节点也放入队列中
                if(tree->left){
    
    
                    q.push(tree->left);
                }
                if(tree->right){
    
    
                    q.push(tree->right);
                }
            }
        }
        return root;
    }
};

猜你喜欢

转载自blog.csdn.net/HERODING23/article/details/108614018