问题描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
解题思路
- 思路采用的中序遍历,实现的是采用非递归。
- 将左指针指向前节点,右节点指向后节点。
Code
public TreeNode Convert(TreeNode pRootOfTree) {
Stack<TreeNode> st = new Stack();
if (pRootOfTree == null) return pRootOfTree;
// 先向左走,是为了得到头结点指针
TreeNode node = pRootOfTree;
while(node != null) {
st.add(node);
node = node.left;
}
pRootOfTree = st.pop();
TreeNode rear = pRootOfTree;
node = pRootOfTree.right;
while (!st.isEmpty() || node != null) {
while(node != null) {
st.add(node);
node = node.left;
}
if (!st.isEmpty()) {
node = st.pop();
// 改动左指针,右指针按照中序遍历的过程移动
rear.right = node;
node.left = rear;
rear = node;
node = node.right;
}
}
return pRootOfTree;
}