剑指offerDay29----二叉搜索树与双向链表

题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

思路:

因为要构成排序的双向链表且是二叉搜索树,所以可以通过中序遍历完成。遍历时,将节点的左子树指向前一个节点,右子树指向后一个节点即可。

源码:GitHub源码

/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    TreeNode Head = null;
    TreeNode pre = null;
    public TreeNode Convert(TreeNode root) {
        if(root == null) return root;
        InOrder(root);
        return Head;
    }
    
    public void InOrder(TreeNode root){
        if(root == null) return;
        InOrder(root.left);
        if(pre == null){
            pre = root;
            Head = root;
        }else{
            pre.right = root;
            root.left = pre;
            pre = root;
        }
        InOrder(root.right);
    }
}

你可能感兴趣的:(剑指offerDay29----二叉搜索树与双向链表)