zoukankan      html  css  js  c++  java
  • 【Tree】BFS求树的深度

     1 /**************************
     2 https://leetcode.com/problems/maximum-depth-of-binary-tree/
     3 @date 2015.5.12
     4 @description
     5 给定一个二叉树,判断树的最大深度(也是树的高度)
     6 按照题目的定义:树的最大深度指的是,从根节点到最远叶节点的途径中节点的个数。空树的深度为0
     7 
     8 @solution
     9 两种思路:
    10 1.DFS 递归算出左右子树的深度,再取最大;
    11 2.BFS 借助辅助队列,将同一层次的节点一起入队,在外的while循环统计层次数
    12 
    13 ***************************/
    14 
    15 #include <iostream>
    16 #include <queue>
    17 
    18 using namespace std;
    19 
    20 struct TreeNode{
    21     int val;
    22     TreeNode *left;
    23     TreeNode *right;
    24     TreeNode(int x): val(x), left(NULL), right(NULL){}
    25 } ;
    26 
    27 
    28 class Solution{
    29 public:
    30         int maxDepth(TreeNode *root){
    31         if (!root) return 0;
    32 
    33         int depth = 0; // 记录树深度
    34         queue<TreeNode *> temp; // 借助辅助队列
    35         temp.push(root);
    36         while(!temp.empty()){
    37             ++depth; // for循环体现BFS思想 把同一层的节点放在一个for循环里,循环外++depth
    38             for (int i = 0, n = temp.size(); i < n; i++){
    39                 TreeNode *node = temp.front();
    40                 temp.pop();
    41                 if (node->left != NULL)
    42                     temp.push(node->left);
    43                 if (node->right != NULL)
    44                     temp.push(node->right);
    45             }
    46 
    47         }
    48 
    49         return depth;
    50     }
    51 };
    52 
    53 TreeNode* insert(TreeNode *root, int data){
    54     TreeNode *ptr = root;
    55     TreeNode *tempNode;
    56     TreeNode *newNode = new TreeNode(data);
    57 
    58     if (ptr == NULL){
    59         return newNode;
    60     }else{
    61         while (ptr != NULL){
    62             tempNode = ptr;
    63             if (ptr->val <= data)
    64                 ptr = ptr->right;
    65             else
    66                 ptr = ptr->right;
    67         }
    68         if (tempNode->val <= data)
    69             tempNode->right = newNode;
    70         else
    71             tempNode->left = newNode;
    72     }
    73     return root;
    74 }
    75 
    76 int main(){
    77     TreeNode *root = NULL;
    78     int temp = 0;
    79     cin >> temp;
    80     while (temp != 0){
    81         root = insert(root, temp);
    82         cin >> temp;
    83     }
    84 
    85     Solution a;
    86     cout << a.maxDepth(root);
    87 }
  • 相关阅读:
    Entity SQL 初入
    ObjectQuery查询及方法
    Entity Framework 的事务 DbTransaction
    Construct Binary Tree from Preorder and Inorder Traversal
    Reverse Linked List
    Best Time to Buy and Sell Stock
    Remove Duplicates from Sorted Array II
    Reverse Integer
    Implement Stack using Queues
    C++中const限定符的应用
  • 原文地址:https://www.cnblogs.com/cnblogsnearby/p/4496540.html
Copyright © 2011-2022 走看看