【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 }

 

转载于:https://www.cnblogs.com/cnblogsnearby/p/4496540.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值