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);    
}

results matching ""

    No results matching ""