zoukankan      html  css  js  c++  java
  • *Binary Tree Upside Down

    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  
    

    思路:

    起始对于每一个节点,相应的操作为:
    p.left = parent.right;
    p.right = parent; 有bug

    public class Solution {
        public TreeNode upsideDownBinaryTree(TreeNode root) {
            TreeNode p = root, parent = null, parentRight = null;
            while (p!=null) {
                TreeNode left = p.left;
                p.left = parentRight;
                parentRight = p.right;
                p.right = parent;
                parent = p;
                p = left;
            }
            return parent;
        }
    }

    reference: http://yuanhsh.iteye.com/blog/2170647

    解法二:recursion

    public TreeNode upsideDownBinaryTree(TreeNode root) {
          if (root == null || root.left == null && root.right == null)
            return root;
    
          TreeNode newRoot = upsideDownBinaryTree(root.left);
    
          root.left.left = root.right;
          root.left.right = root;
    
          root.left = null;
          root.right = null;
    
          return newRoot;
    }
  • 相关阅读:
    webpack入门+react环境配置
    mailto: HTML e-mail 链接
    IE兼容性手册
    浏览器内核Trident/Gecko/WebKit/Presto
    抓包
    js页面埋点
    http返回码
    meta
    img和css背景的选择
    谈谈Web前端工程师的定位
  • 原文地址:https://www.cnblogs.com/hygeia/p/5143932.html
Copyright © 2011-2022 走看看