559.N叉树的最大深度(LeetCode)

dfs深度优先搜索

(注意:题目有思路时要注意搜索边界条件!!!)

1.要判断根结点的子节点是否为空,如果没有子节点,那么深度就是1个根结点。

2.设置一个深度最大值ans,递归搜索得到一个深度值时,若搜索到的深度大于当前ans的值,就更新ans值。

3.要注意,存储子节点时用的是vector容器,容器中装的是Node类型的指针,当定义一个迭代器指针it时(vector<Node*>::iterator it),it指向Node类指针,即 * it=children(可以说it的内容存放的是Node类指针的地址)程序递归调用的参数是Node类型的指针,所以要解引用,* it=children (children是Node类型的指针)。也可以令Node *p=*it

 1 // Definition for a Node.
 2 class Node {
 3 public:
 4     int val;
 5     vector<Node*> children;
 6 
 7     Node() {}
 8 
 9     Node(int _val) {
10         val = _val;
11     }
12 
13     Node(int _val, vector<Node*> _children) {
14         val = _val;
15         children = _children;
16     }
17 };
18 */
19 class Solution {
20 public:
21     int ans=-1;
22     void dfs(Node* root,int deep){
23         //没有子节点,递归结束
24         if(root->children.empty()){
25             if(ans<deep){
26                 ans=deep;
27             }
28             return ;
29         }
30 
31         else{
32             vector<Node*>::iterator it=root->children.begin();
33             //迭代器指针指向子节点指针  
34             for(;it!=root->children.end();it++){
35                 Node *p=*it;  
36                 dfs(p,deep+1);   //子节点不空,向下递归并且深度加1
37             }
38         }
39     }
40 
41     int maxDepth(Node* root) {
42         if(root==NULL)  return 0;
43         else{
44             dfs(root,1);  
45             return ans;
46         }     
47     }
48 };
View Code

 

posted @ 2020-02-10 17:31  三行代码划江湖  阅读(169)  评论(0编辑  收藏  举报