二叉樹的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     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM