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;
        }
    };
  • 相关阅读:
    java面向对象3
    java面向对象2
    java面向对象1
    java基础5
    java基础4
    java基础3
    递归之汉诺塔问题
    自定义 strcpy函数
    自定义strcmp函数
    自定义strcat函数
  • 原文地址:https://www.cnblogs.com/parzulpan/p/10090493.html
Copyright © 2011-2022 走看看