二叉搜索树和双向链表 --剑指offer

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

思路:二叉搜索树的中序遍历序列是递增的 所以就是二叉树的中序遍历

非递归:

import java.util.Stack;
public class Solution {
        public TreeNode Convert(TreeNode pRootOfTree) {
        if(pRootOfTree == null){
            return  null;
        }
        Stack<TreeNode> stack=new Stack<>();
        TreeNode p=pRootOfTree;
        TreeNode pre=null;
        boolean isFirst=true;
        while (p!=null || !stack.isEmpty()){
            while (p != null){
                stack.push(p);
                p = p.left;
            }
            if(!stack.isEmpty()){
                p=stack.pop();
                if(isFirst){
                    pRootOfTree = p;
                    pre=pRootOfTree;
                    isFirst=false;
                }else {
                    p.left=pre;
                    pre.right=p;
                    pre=p;
                }
                p=p.right;
            }
        }
        return pRootOfTree;
    }
}

递归:

import java.util.Stack;
public class Solution {
    TreeNode pre=null;
        public TreeNode Convert(TreeNode pRootOfTree) {
        if(pRootOfTree == null){
            return null;
        }
        ConvertCore(pRootOfTree);
        TreeNode root=pRootOfTree;
        while(root.left != null){
            root = root.left;
        }
        return root;
    }
    public void ConvertCore(TreeNode  cur){
        if(cur == null){
            return;
        }
        ConvertCore(cur.left);
        cur.left=pre;
        if (pre != null){
            pre.right=cur;
        }
        pre=cur;
        ConvertCore(cur.right);
    }
}
原文地址:https://www.cnblogs.com/nlw-blog/p/12431919.html