Java--二叉搜索树转换为排序双向链表

∥☆過路亽.° 提交于 2019-11-30 09:35:41

二叉搜索树是一种特殊的二叉树,左子树的所有结点小于根节点,右子树的所有结点大于根节点。
此题使用中序遍历即可得到有序序列
把相邻的元素互相指向,left指向前一个元素,right指向后一个元素
1.判定特殊情况,如果为空,则返回null
2.递归把左子树变成双向链表,并返回这个链表的第一个结点
3.如果左侧链表的头结点不为空,当前左侧链表的尾巴找到,让左侧链表的尾结点和当前root结点相互指向
4.递归将右子树转换成双向链表
5.把右侧链表的头节点和当前结点相互指向

 public TreeNode Convert(TreeNode pRootOfTree){
        if(pRootOfTree == null){
            return null;
        }
        if(pRootOfTree.left == null && pRootOfTree.right == null){
            return pRootOfTree;
        }
        TreeNode left = Convert(pRootOfTree.left);
        TreeNode leftTail = left;
        while(pRootOfTree.left != null && leftTail.right != null){
            leftTail = leftTail.right;
        }
        if(left != null){
            leftTail.right = pRootOfTree;
            pRootOfTree.left = leftTail;
        }
        TreeNode right = Convert(pRootOfTree.right);
        if(right != null){
            pRootOfTree.right = right;
            right.left = pRootOfTree;
        }
        return left == null?pRootOfTree:left;
    }

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!