首页 > 代码库 > [Leetcode][Tree][Depth of Binary Tree]

[Leetcode][Tree][Depth of Binary Tree]

计算树的深度

 

1、minimum depth of binary tree

 1 /** 2  * Definition for binary tree 3  * struct TreeNode { 4  *     int val; 5  *     TreeNode *left; 6  *     TreeNode *right; 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8  * }; 9  */10 class Solution {11 public:12     int minDepth(TreeNode *root) {13         if (root == NULL) {14             return 0;15         }16         if (root->left == NULL && root->right == NULL) {17             return 1;18         }19         int left = INT_MAX;20         int right = INT_MAX;21         if (root->left != NULL) {22             left = minDepth(root->left);23         }24         if (root->right != NULL) {25             right = minDepth(root->right);26         }27         return min(left, right) + 1;28     }29 };

总结:刚开始用非常简单的递归,发现wa了,是由于root结点在有一个子树的时候,不算是叶子,需要特殊处理。

又写了一个迭代的版本,也可以用作树的层次遍历。回忆了一下stack和queue的用法。

 1 /** 2  * Definition for binary tree 3  * struct TreeNode { 4  *     int val; 5  *     TreeNode *left; 6  *     TreeNode *right; 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8  * }; 9  */10 class Solution {11 public:12     int minDepth(TreeNode *root) {13         int result = INT_MAX;14         queue<pair<TreeNode*, int>> q;15         if (root != NULL) {16             q.push(make_pair(root,1));17         } else {18             return 0;19         }20         while (!q.empty()) {21             auto node = q.front().first;22             auto depth = q.front().second;23             q.pop();24             if (node->left == NULL && node->right == NULL) {25                 result = min(result, depth);26             }27             if (node->left != NULL) {28                 q.push(make_pair(node->left, depth + 1));29             }30             if (node->right != NULL) {31                 q.push(make_pair(node->right, depth + 1));32             }33         }34         return result;35     }36 };

 

 

2、Maximum depth of binary tree

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    int maxDepth(TreeNode *root) {        if (root == NULL) {            return 0;        }        return max(maxDepth(root->left), maxDepth(root->right)) + 1;        /*        if (root->left == NULL && root->right == NULL) {            return 1;        }        int left = INT_MIN;        int right = INT_MIN;        if (root->left != NULL) {            left = maxDepth(root->left);        }        if (root->right != NULL) {            right = maxDepth(root->right);        }        return max(left, right) + 1;        */    }};

CE了一次。。又不小心把单词拼错了。。

总结:maximum depth用了非常简单的递归,但是这种方法用在Minimum上就不行,需要对root结点进行特殊的处理。