二叉树-flatten binary search tree to linked lis

采用preorder结构。根节点首先输出,下一个节点为左子节点,左子节点的末端链接根节点的右子节点。

2014 update:
public class Solution {
    public void flatten(TreeNode root) {
        TreeNode fake = new TreeNode(0);
        Stack<TreeNode> s = new Stack<TreeNode>();
        TreeNode pre = fake;
        TreeNode cur = root;
        while (cur != null || !s.isEmpty()) {
            if (cur != null) {
                if (cur.right != null) {
                    s.push(cur.right);
                }
                pre.right = cur;
                pre.left = null;
                pre = pre.right;
                cur = cur.left;
            } else {
                cur = s.pop();
            }
        }
    }
}

2013:
/ Flatten Binary Tree to Linked List
class Solution { 
//循环
    public voidflatten(TreeNode root) { 
       if (root == null) {
          return;
       }
       Stack s = new Stack();
       TreeNode prev = root;
       TreeNode cur;
       if (root.left != null ) {
           cur =root.left;
           if(root.right != null) {
              s.push(root.right);
           }
       } else if (root.right != null) {
           cur =root.right;
       } else {
          return;
       }
       
       while (cur != null || !s.isEmpty()) {
           if (cur !=null) {
              prev.right = cur;
              prev.left = null;
              if (cur.right != null){
                 s.push(cur.right);
              }             
              prev = cur;
              cur = cur.left;
           } else{
              cur = s.pop();
           }
       }
   } 
};

/
/ Flatten Binary Tree to Linked List
class Solution { 
//递归
    public voidflatten(TreeNode root) { 
       helper(root);
   } 
    
    // return righttail
    TreeNode helper(TreeNoderoot) {
       if (root == null) {
           returnnull;
       }
       
       TreeNode leftTail = helper(root.left);
       TreeNode rightTail = helper(root.right);
       if (leftTail != null) {
          leftTail.right = root.right;
       }
       
       if (root.left != null) {
           root.right= root.left;
           root.left= null;
       }

       if (rightTail != null ) {
           returnrightTail;
       }
       if (leftTail != null) {
           returnleftTail;
       }
       return root;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值