牛客网 二叉树搜索树与双向链表

非递归方法

/**
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;
    }
}

猜你喜欢

转载自blog.csdn.net/LuckyMeizai/article/details/80643498
今日推荐