zoukankan      html  css  js  c++  java
  • 二叉树的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     }
  • 相关阅读:
    微信支付可能改变的六大行业
    WeChat Official Account Admin Platform API Introduction
    WeChat Official Account Admin Platform Message API Guide
    微信公众平台开发(61)预约挂号
    PHP获取Cookie模拟登录
    微信公众平台开发(60)每日英语
    微信公众平台开发(59)相册
    SQL语句执行顺序
    sql
    pthread_rwlock_t
  • 原文地址:https://www.cnblogs.com/CongLollipop/p/6858260.html
Copyright © 2011-2022 走看看