二叉搜索树与双向链表

题目详情

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

详解

二叉搜索树的中序遍历即为有序。

            head.right = pRootOfTree;
            pRootOfTree.left =head;
            head = pRootOfTree;

  将根节点放在左子树的右边,根节点比左子树大。双向的,将左子树放在根节点左边。

        TreeNode head = null;
        TreeNode realhead = null;

  放在最上面,因为内置函数需要调用,放到主函数里面是局部变量。

  realhead

  先遍历左子树再是右子树

/**
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 realhead = null;
    public TreeNode Convert(TreeNode pRootOfTree) {
        Convert2(pRootOfTree);
        return realhead;
    }
    public void Convert2(TreeNode pRootOfTree){
        if (pRootOfTree == null){
            return;
        }
        Convert2(pRootOfTree.left);
        if (head == null){
            head = pRootOfTree;
            realhead =pRootOfTree;
        }else{
            head.right = pRootOfTree;
            pRootOfTree.left =head;
            head = pRootOfTree;
        }
        Convert2(pRootOfTree.right);
        }
}

  

posted @ 2020-03-19 00:51  xxcnotes  阅读(135)  评论(0)    收藏  举报