题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路:
利用栈,循环条件(p不为空||栈不为空)先一直压栈树的左节点,弹出栈顶,将其作为双向链表的ROOT,之后弹栈一个元素,更改前面定好的指针,使用pre指向当前节点之前的节点,p指向当前弹出元素,改变前后双向指针的顺序,之后p指向当前弹栈元素的右节点。
代码:
import java.util.Stack; public class Solution { public TreeNode Convert(TreeNode root) { if(root==null) return null; Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode p = root; TreeNode pre = null; boolean isFirst = true; while(p!=null||!stack.isEmpty()){ while(p!=null){ stack.push(p); p = p.left; } p = stack.pop(); if(isFirst){ root = p; pre = root; isFirst = false; }else{ pre.right = p; p.left = pre; pre = p; } p = p.right; } return root; } }