二叉搜索树与双向链表


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


解题思路

我们知道,二叉搜索树的中序遍历结果是有序的,因此我们第一个想到的就是使用中序遍历,在这个过程中对结点进行操作

public class Solution {
    
    // 标记上一次入栈值
    private TreeNode preNode = null;
    private TreeNode head = null;
    
    public TreeNode Convert(TreeNode pRootOfTree) {
        if (pRootOfTree == null) {
            return null;
        }
        midShow(pRootOfTree);
        return head;
    }
    
    public void midShow(TreeNode pRootOfTree) {
        if(pRootOfTree.left != null) {
            midShow(pRootOfTree.left);
        }
        if(preNode == null) {
            head = pRootOfTree;
            preNode = pRootOfTree;
        } else {
            preNode.right = pRootOfTree;
            pRootOfTree.left = preNode;
            preNode = pRootOfTree;
        }
        if(pRootOfTree.right != null) {
            midShow(pRootOfTree.right);
        }
    }
}

原文地址:https://www.cnblogs.com/Yee-Q/p/13797181.html