二叉树的BFS和DFS遍历

面试常考的点BFS和DFS的遍历。

给一棵二叉树,写出他的BFS遍历情况(应该就是按层遍历)以及DFS遍历情况。

BFS 用一个队列存储节点。Queue

BFS实现代码如下:

 1 // 给定跟节点 求出BFS遍历二叉树的锅。
 2     public List<TreeNode> Bfs_tree(TreeNode root){
 3         Queue<TreeNode> myq = new LinkedList<>();
 4         List<TreeNode> res = new ArrayList<>();
 5         if(root==null) return null;
 6         myq.add(root);
 7         while(!myq.isEmpty()){
 8             int len = myq.size();
 9             for(int i=0;i<len;i++){
10                 if(myq.peek().left!=null) myq.add(myq.peek().left);
11                 if(myq.peek().right!=null) myq.add(myq.peek().right);
12                 res.add(myq.poll());
13             }
14         }
15         return res;
16     }

Bfs可参见leetcode:https://leetcode.com/submissions/detail/61715373/

DFS 遍历二叉树分成前中后序遍历。前面博客中写过了。用栈。

一般的DFS如下:

 1 //Dfs遍历二叉树 先压栈柚子树 然后左子树
 2     public List<TreeNode> Dfs_tree(TreeNode root){
 3        Stack<TreeNode>  sta = new Stack<>();
 4        List<TreeNode> res = new ArrayList<>();
 5        if(root==null) return null;
 6         // res.add(root);
 7        sta.add(root);
 8        while(!sta.isEmpty()){
 9            TreeNode temp = sta.pop();
10            res.add(temp);
11            if(temp.right!=null) sta.push(temp.right);
12            if(temp.left!=null) sta.push(temp.left);
13        }
14         return res;
15         
16     }

 

posted @ 2017-05-15 20:32  王小丸子  阅读(7267)  评论(0编辑  收藏