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

题目描述

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

例图:

解法:

由于是二叉搜索树,因此中序遍历的结果就是排序的。

中序遍历利用栈来实现。遍历时,前一个结点的 right 指向后一个结点,后一个结点的 left 指向前一个结点。(10连接左子树的最大值,同时连接右子树的最小值。)

public TreeNode convert(TreeNode root){
       if(root==null){
           return null;
       }
       Stack<TreeNode> stack = new Stack<>();
       TreeNode cur = root;
       TreeNode res = null;
       TreeNode pre = null;
       while(cur != null || !stack.isEmpty()){
           if(cur != null){
               stack.push(cur);
               cur = cur.left;
           }else{
               cur = stack.pop();
               if(pre == null){
                   pre = cur;
                   res = pre;
               }else{
                   pre.right = cur;
                   cur.left = pre;
                   pre = cur;
               }
               cur = cur.right;
           }
      }
     return res;
}

可转换成递归的方式

原文地址:https://www.cnblogs.com/lisen10/p/11218710.html