Flatten Binary Tree to Linked List

注意要传previous node,而java中不能传reference

法一:prev为static variable   法二:用个array wrap它...

1. Preorder flatten(Leetcode):

public class Solution { 
    TreeNode prev = null;
    public void flatten(TreeNode root) { 
        if (root == null) {
            return;
        }
        TreeNode rightnode = root.right;
        if (prev != null) {
            prev.left = null;
            prev.right = root;
        }
        
        prev = root;
        flatten(root.left);
        
       // prev = root.left;
        flatten(rightnode);
    } 
} 


之前写的混有iteration的recursion
public class Solution { 
    public void flatten(TreeNode root) { 
       // use recursion
        if(root == null) return;
        
        TreeNode left = root.left;
        TreeNode right = root.right;
        
        flatten(root.left);
        flatten(root.right);

        root.right = left;
        root.left = null;
        
        TreeNode temp = root;
        while(temp.right!=null){
            temp = temp.right;
        }
        temp.right = right;
    } 
}


2. populating each node to its successor in BST

public void addSuccessor(Node node, Node[] prev) {
  if (node == null)
    return;
  addSuccessor(node.left, prev);
  if (prev[0] != null)
    prev[0].next = node;
  prev[0] = node;
  addSuccessor(node.right, prev);
}

3. find the xth node in BST

public TreeNode getNthNode(TreeNode node, IntWrapper i, int x) {
  if (node == null)
    return null;
  TreeNode foundAtLeft = getNthNode(node.left, i, x);
  i.val++;
  if (i.val == x)
     return node;
  if (foundAtLeft != null)
    return foundAtLeft;
    return getNthNode(node.right, i, x);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值