深度优先搜索案例
(Leetcode 173)
* Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the root node of a BST.
* Calling next() will return the next smallest number in the BST.
* Note: next() and hasNext() should run in average O(1) time and uses O(h) memory, where h is the height of the tree.
public class BSTIterator { private List<Integer> list = new ArrayList<Integer>(); int cursor = -1; public static class TreeNode{ int val; TreeNode left; TreeNode right; public TreeNode(int val) { this.val = val; } } /** * Your BSTIterator will be called like this: * BSTIterator i = new BSTIterator(root); * while (i.hasNext()) v[f()] = i.next(); */ public BSTIterator(TreeNode root) { helper(root); } private void helper(TreeNode root) { if (root == null){ return; } helper(root.left); list.add(root.val); helper(root.right); } /** @return whether we have a next smallest number */ public boolean hasNext() { if (cursor < list.size()-1) return true; else return false; } /** @return the next smallest number */ public int next() { cursor++; return list.get(cursor); } }
广度搜索举例
Leetcode 199
Given a binary tree, return the level order traversal of its nodes‘ values. (ie, from left to right, level by level).
For example:
Given binary tree {3,9,20,#,#,15,7},
3
/ \
9 20
/ \
15 7
return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
树节点的定义:
private class TreeNode{ int val; TreeNode left; TreeNode right; public TreeNode(int val) { this.val = val; } }
广度优先搜索遍历:
public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> result = new ArrayList<List<Integer>>(); List<TreeNode> layer = new ArrayList<TreeNode>(); if (root != null){ layer.add(root); } while (!layer.isEmpty()){ List<Integer> vals = new ArrayList<Integer>(); List<TreeNode> temp = new ArrayList<TreeNode>(); for (int i = 0; i < layer.size(); i++) { vals.add(layer.get(i).val); TreeNode left = layer.get(i).left; TreeNode right = layer.get(i).right; if (left != null){ temp.add(left); } if (right != null){ temp.add(right); } } result.add(vals); layer = temp; } return result; }
原文:http://www.cnblogs.com/chuji1988/p/4790117.html