二叉搜索树转排序双向链表
思想
- 中序遍历,即可完成从小到大
- 重点是。根节点的left是其左子树的最右节点,此节点为左子树遍历的最后一个节点,因此利用last指针更新保存当前遍历到的节点,和root连接即可。
public class Solution {
TreeNode last = null;
TreeNode realHead = null;
public TreeNode Convert(TreeNode pRootOfTree) {
ConvertSub(pRootOfTree);
return realHead;
}
private void ConvertSub(TreeNode pRootOfTree) {
if(pRootOfTree==null) return;
ConvertSub(pRootOfTree.left);
if (last == null) {
last = pRootOfTree;
realHead = pRootOfTree;
} else {
last.right = pRootOfTree;
pRootOfTree.left = last;
last = pRootOfTree;
}
ConvertSub(pRootOfTree.right);
}
}