关闭

Binary Tree Inorder Traversal

标签: javaleetcodetree迭代
100人阅读 评论(0) 收藏 举报
分类:

题目描述:

Given a binary tree, return the inorder traversal of its nodes' values.

For example:
Given binary tree {1,#,2,3},

   1
    \
     2
    /
   3

return [1,3,2].

Note: Recursive solution is trivial, could you do it iteratively?

这个递归方法比较简单,代码如下:

public List<Integer> inorderTraversal(TreeNode root) {
    List<Integer> list = new ArrayList<Integer>();
    getInorderTraversal(root, list);
    return list;
}

public void getInorderTraversal(TreeNode root,List<Integer> list){
	if(root==null)
		return;
	getInorderTraversal(root.left, list);
	list.add(root.val);
	getInorderTraversal(root.right, list);
}

但是这个题目要求用迭代,用一个set记录已经被访问过的左孩子节点就可以了。代码如下:

public List<Integer> inorderTraversal(TreeNode root) {
    Set<TreeNode> visited=new HashSet<TreeNode>();
    List<Integer> result=new ArrayList<Integer>();
    Stack<TreeNode> stack=new Stack<TreeNode>();
    stack.push(root);
    while(!stack.isEmpty()){
    	TreeNode p=stack.peek();
    	if(p.left!=null&&!visited.contains(p.left)){
    		stack.push(p.left);
    	}else{
    		p=stack.pop();
    		result.add(p.val);
    		visited.add(p);
    		if(p.right!=null){
    			stack.add(p.right);
    		}
    	}
    }
    return result;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:45640次
    • 积分:2561
    • 等级:
    • 排名:第14893名
    • 原创:215篇
    • 转载:37篇
    • 译文:0篇
    • 评论:5条
    最新评论