3.3 104. 111. Minimum/Maximum Depth of Binary Tree
這兩題,一題是找從root到葉結點最大深度,一題是找最小,直接做全樹的尋訪
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
#define MAX(a,b) (((a)>(b))?(a):(b))
//int num=0;
int travel(struct TreeNode* node, int level, int num) {
/*如果沒有左右子數了,代表是葉結點*/
if(!node->left && !node->right) {
num = MAX(num, level);
return num;
}
/*先從左找 再往右找*/
if(node->left) {
num=travel(node->left, level + 1,num);
}
if(node->right) {
num=travel(node->right, level + 1,num);
}
return num;
}
int maxDepth(struct TreeNode* root) {
int max=0;
if(root == NULL)
return 0;
max=travel(root,1,1);
return max;
}
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
#define MIN(a,b) (((a)<(b))?(a):(b))
int travel(struct TreeNode* node, int level, int num) {
if(!node->left && !node->right) {
num = MIN(num, level);
return num;
}
if(node->left) {
num=travel(node->left, level + 1,num);
}
if(node->right) {
num=travel(node->right, level + 1,num);
}
return num;
}
int minDepth(struct TreeNode* root) {
int min=0;
if(root ==NULL)
return 0;
/*這99999只是隨個很大的數,假設題目最小結點不會大於這個數*/
return min=travel(root,1,99999);
}