zoukankan      html  css  js  c++  java
  • LeetCode226 翻转二叉树

    翻转一棵二叉树。

    示例:

    输入:

         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 == NULL) 
                return NULL
            TreeNode *tmp = root->left;
            root->left = invertTree(root->right);
            root->right = invertTree(tmp);
            return root;
        }
    };
    /*
    算法思想:
        非递归的方法也不复杂,跟二叉树的层序遍历一样,需要用queue来辅助,先把根节点加入队列中,然后从队中取出来,交换其左右节点,如果存在则分别将左右节点在加入队列中,以此类推直到队列中没有节点了停止循环,返回root即可。
    */
    //算法实现:
    
    class Solution {
    public:
        TreeNode* invertTree(TreeNode* root) {
            if (!root) 
                return NULL;
            queue<TreeNode*> q;
            q.push(root);
            while (!q.empty()) {
                TreeNode *node = q.front(); q.pop();
                
                TreeNode *tmp = node->left;
                node->left = node->right;
                node->right = tmp;
                
                if (node->left) 
                    q.push(node->left);
                if (node->right) 
                    q.push(node->right);
            }
            return root;
        }
    };
  • 相关阅读:
    BZOJ3236:[AHOI2013]作业(莫队,分块)
    BZOJ5334:[TJOI2018]数学计算(线段树)
    BZOJ3173:[TJOI2013]最长上升子序列(Splay)
    BZOJ3211:花神游历各国(线段树)
    BZOJ3155:Preprefix sum(线段树)
    HDU5002:Tree(LCT)
    【BZOJ 1911】 [Apio2010]特别行动队
    【BZOJ 2875】 [Noi2012]随机数生成器
    【BZOJ 1054】 [HAOI2008]移动玩具
    【BZOJ 1497】 [NOI2006]最大获利
  • 原文地址:https://www.cnblogs.com/parzulpan/p/10090493.html
Copyright © 2011-2022 走看看