题目: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。
例子: 代码1(递归+中序遍历)
class Solution {
TreeNode pre, head;
public TreeNode treeToDoublyList(TreeNode root){
mediean(root);
head.setRight(pre);
pre.setLeft(root);
return head;
}
public void mediean(TreeNode root){
if (root == null) return;
mediean(root.getLeft());
if (pre ==null){
head = root;
}else {
pre.setRight(root);
root.setLeft(pre);
}
pre = root;
mediean(root.getRight());
}
}
代码1解释:
在没有参考别人的答案之前,我想着也是用中序遍历,然后每次调用一次的时候返回下一个节点,然后将下一个节点 和当前节点拉起来。但是一直没有找到怎么弄,后来想不出来,就看了下别人的解释。
其实很简单,用一个中序遍历,可以得到当前的节点root,然后需要一个指针指向前一个节点pre,但是肯定不能放在函数体中,所以放在了class里边,这样可以全局访问。
|