[leetcode] 小心成环

156. 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  

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

/**
 * 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) {
            return null;
        }
        TreeNode result = helper(root);
        return result;
    }
    private TreeNode helper(TreeNode r) {
        TreeNode left = r.left;
        TreeNode right = r.right;
        if (left == null && right == null) {
            return r;
        }
        TreeNode result = helper(left);
        left.right = r;
        left.left = right;
        //modify root to leaf node
        r.left = null;
        r.right = null;
        return result;
    }
}

防止成环的代码是这段:

//modify root to leaf node
        r.left = null;
        r.right = null;

让根节点变成叶子节点。

currentNode的那道 sort list也要注意。不然merge的时候, 前半串会找不到终点的

原文地址:https://www.cnblogs.com/Gryffin/p/6235491.html