LeetCode二叉樹的遍歷

144. 二叉樹的前序遍歷

描述:

給定一個二叉樹,返回它的 前序 遍歷。

 示例:

輸入: [1,null,2,3]  
   1
    \
     2
    /
   3 

輸出: [1,2,3]

代碼:

class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        Stack<TreeNode> stack=new Stack<TreeNode>();
	List<Integer> list=new ArrayList<Integer>();
	TreeNode cur=root;
	if(cur==null)
	    return list;
	stack.push(root);
	list.add(root.val);
	while(!stack.isEmpty()||cur.left!=null){
	    if(cur.left!=null){
		cur=cur.left;
		stack.push(cur);
		list.add(cur.val);
				
	    }else{
		cur=stack.pop();
		if(cur.right!=null){
		    cur=cur.right;
		    stack.push(cur);
		    list.add(cur.val);
		}else{
		    cur.left=null;
		}
	    }
	}
	return list;
    }
}

94. 二叉樹的中序遍歷

描述:

給定一個二叉樹,返回它的中序 遍歷。

示例:

輸入: [1,null,2,3]
   1
    \
     2
    /
   3

輸出: [1,3,2]

進階: 遞歸算法很簡單,你可以通過迭代算法完成嗎?

 代碼:

遞歸方法:

class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> list=new ArrayList<Integer>();
	if(root==null)
	    return new ArrayList<Integer>();
	else{
	    List<Integer> listLeft=inorderTraversal(root.left);
	    list.addAll(listLeft);
	    list.add(root.val);
	    List<Integer> listRight=inorderTraversal(root.right);
	    list.addAll(listRight);
	}
	return list;
    }
}

 非遞歸方法:

class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
       List<Integer> list = new ArrayList<>();
       Stack<TreeNode> stack = new Stack<>();
       TreeNode cur = root;
       while (cur != null || !stack.isEmpty()) {
            if (cur != null) {
                stack.push(cur);
                cur = cur.left;
            } else {
                cur = stack.pop();
                list.add(cur.val);
                cur = cur.right;
            }
         }
       return list;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章