二叉树-flatten binary search tree to linked lis

来源:互联网 发布:java 首字母小写 编辑:程序博客网 时间:2024/05/21 22:31
采用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 Listclass 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 Listclass 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
原创粉丝点击