非递归方法
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
import java.util.Stack;
public class Solution {
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree==null){
return null;
}
TreeNode pre=null;//用于指示前一个节点
TreeNode root=null;//用于返回根节点
Stack<TreeNode> stack=new Stack<TreeNode>();
boolean isFirstNode=true;//判断是不是链表中的第一个节点
TreeNode p=pRootOfTree;
while(p!=null||!stack.isEmpty()){
while(p!=null){
stack.push(p);
p=p.left;//遍历到最左边的节点
}
p=stack.pop();
if(isFirstNode){
pre=p;
root=pre;
isFirstNode=false;
}else{
p.left=pre;
pre.right=p;
pre=p;
}
p=p.right;
}
return root;
}
}