• 【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 }
  • 相关阅读:
    DB2开发系列之三——SQL函数
    DB2开发系列之二——SQL过程
    DB2开发系列之一——基本语法
    优化的“真谛”
    DB2性能调优
    AIX分页(交换)空间的监控
    AIX5L内存监控和调整
    直接删除undo及temp表空间文件后的数据库恢复一例
    【LeetCode】 -- 68.Text Justification
    关于linux下的.a文件与 .so 文件
  • 原文地址:https://www.cnblogs.com/cnblogsnearby/p/4496540.html
Copyright © 2020-2023  润新知