Convert a Binary Tree to Doubly Linked List

来源:互联网 发布:r9网络不稳定怎么回事 编辑:程序博客网 时间:2024/06/06 23:19

/*Convert a binary search tree to doubly linked list with in-order traversal.ExampleGiven a binary search tree:    4   / \  2   5 / \1   3return 1<->2<->3<->4<->5Tags Expand Linked List*/


/*    Thoughts:    Inorder with 1 stack: peek add left till end, pop and add, then push right node.        Everytime when pop out a node and add, make it a new boubllistnode        dNode.next = curr        curr.pre = dNode.next        dNode = dNode.next            boarder case: if null, return a null.*/public class Solution {    public DoublyListNode bstToDoublyList(TreeNode root) {          if (root == null) {            return null;        }        //Init stack        Stack<TreeNode> stack = new Stack<TreeNode>();        TreeNode node = root;            stack.push(node);        //Create DoublyListNode header        DoublyListNode dummy = new DoublyListNode(0);        DoublyListNode dNode = dummy;                            while(!stack.isEmpty()) {            while (node != null && node.left != null) {                stack.push(node.left);                node = node.left;            }            //add node            node = stack.pop();            DoublyListNode curr = new DoublyListNode(node.val);            dNode.next = curr;            curr.prev = dNode;            dNode = dNode.next;                        //check right node and add to stack            node = node.right;            if (node != null) {                stack.push(node);            }          }                return dummy.next;            }}


原创粉丝点击