zoukankan      html  css  js  c++  java
  • ✡ leetcode 156. Binary Tree Upside Down 旋转树 --------- java

    156. Binary Tree Upside Down

     
     My Submissions
     
    • Total Accepted: 18225
    • Total Submissions: 43407
    • Difficulty: Medium
    • Contributors: Admin

    Given a binary tree where all the right nodes are either leaf nodes with a sibling (a left node that shares the same parent node) or empty, flip it upside down and turn it into a tree where the original right nodes turned into left leaf nodes. Return the new root.

    For example:
    Given a binary tree {1,2,3,4,5},
        1
       / 
      2   3
     / 
    4   5
    

    return the root of the binary tree [4,5,2,#,#,3,1].

       4
      / 
     5   2
        / 
       3   1  
    

    confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.


    OJ's Binary Tree Serialization:

    The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.

    Here's an example:

       1
      / 
     2   3
        /
       4
        
         5
    
    The above binary tree is serialized as "{1,2,3,#,#,4,#,#,5}".
     
    给定一棵树,这棵树的右节点有两种选择:1、空节点 2、叶子结点(左节点一定存在)
     
    然后旋转该树(结构对称)且左节点变换为:1、空节点 2、叶子结点(右节点一定存在)
     
    那么就可以用递归和非递归两种形式实现。
     
    我选择了非递归的实现方法。
     
    自顶向下:给定[1,2,3],变换为[2,3,1]依次从上向下变换即可。
     
    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public TreeNode upsideDownBinaryTree(TreeNode root) {
            if (root == null || (root.left == null && root.right == null)){
                return root;
            }
            TreeNode node = root;
            TreeNode nodeLeft = root.left;
            TreeNode nodeRight = root.right;
            while (nodeLeft != null){
                TreeNode nodeChange = node;
                TreeNode nodeLeftChange = nodeLeft;
                TreeNode nodeRightChange = nodeRight;
                node = nodeLeft;
                nodeLeft = node.left;
                nodeRight = node.right;
                nodeLeftChange.left = nodeRightChange;
                nodeLeftChange.right = nodeChange;
            }
            root.left = null;
            root.right = null;
            return node;
        }
    }
     
     
  • 相关阅读:
    oracle 10g 免安装客户端在windows下配置
    sql2005 sa密码
    使用windows live writer 有感
    windows xp SNMP安装包提取
    汉化groove2007
    迁移SQL server 2005 Reporting Services到SQL server 2008 Reporting Services全程截图操作指南
    foxmail 6在使用中的问题
    AGPM客户端连接不上服务器解决一例
    SpringSource Tool Suite add CloudFoundry service
    Java 之 SWing
  • 原文地址:https://www.cnblogs.com/xiaoba1203/p/6109066.html
Copyright © 2011-2022 走看看