二叉搜索树与双向链表
将BST转成双向链表,相当于中序遍历
非递归法:
public class Solution {
public static TreeNode Convert(TreeNode pRootOfTree) {
TreeNode p = pRootOfTree;
TreeNode q = null;
if(p!=null){
LinkedList<TreeNode> list = new LinkedList<>();
list.push(p);//根结点入栈
while(p.left!=null){//左子树的根节点入栈
p = p.left;
list.push(p);
}
TreeNode head = p;//题目需要输出的链表头节点
while(!list.isEmpty()){
p = (TreeNode)list.pop();
if(q == null){//q指向链表当前结点的前一个结点
q = p;
}
else{
q.right = p;
p.left = q;
q = p;
}
if(p.right != null){//右子树入栈
list.push(p.right);
p = p.right;
while(p.left!=null){
p = p.left;
list.push(p);
}
}
}
return head;
}
return null;
}
}
https://en.wikipedia.org/wiki/Tree_traversal#Iterative_Traversal