题目

将一个二叉查找树按照中序遍历转换成双向链表

给定一个二叉查找树:

    4
   / \
  2   5
 / \
1   3

返回 1<->2<->3<->4<->5

解题

/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 * Definition for Doubly-ListNode.
 * public class DoublyListNode {
 *     int val;
 *     DoublyListNode next, prev;
 *     DoublyListNode(int val) {
 *         this.val = val;
 *         this.next = this.prev = null;
 *     }
 * }
 */ 
 public class Solution {
    /**
     * @param root: The root of tree
     * @return: the head of doubly list node
     */

    public DoublyListNode bstToDoublyList(TreeNode root) {  
        // Write your code here
        if(root == null)
            return null;
        DoublyListNode Root = new DoublyListNode(root.val);
        if(root.left==null && root.right==null){
            return Root;
        }
        DoublyListNode left = bstToDoublyList(root.left);
        DoublyListNode tmpLeft = left;
        while(tmpLeft!=null && tmpLeft.next!=null){
            tmpLeft = tmpLeft.next;
        }
        if(left!=null){
            tmpLeft.next = Root;
            Root.prev = tmpLeft;
        }
        DoublyListNode right = bstToDoublyList(root.right);
        if(right!=null){
            Root.next = right;
            right.prev = Root;
        }
        return  left!=null?left:Root; 
    }
}