[c][算法]二叉樹的深度

Given a binary tree, find its maximum depth.node

The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf nodecode

/*
Given a binary tree, find its maximum depth.

The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node 
*/

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
// class Solution {
// public:
//     int maxDepth(TreeNode* root) { 
      
//     }
// };
#import <Foundation/Foundation.h>
#import <stdio.h>

typedef struct TreeNode TreeNode;

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    //    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

TreeNode* MakeTreeNode(int x);

void ConnectTreeNodes(TreeNode* pParent,TreeNode* pLeft,TreeNode* pRight);

int maxDepth(TreeNode* root);


int main (int argc, const char * argv[])
{
    @autoreleasepool {
        
        // TEST
        //            1
        //         /      \
        //        2        3
        //       /\         \
        //      4  5         6
        //        /
        //       7
        //creat Nodes
        TreeNode* pNode1 = MakeTreeNode(1);
        TreeNode* pNode2 = MakeTreeNode(2);
        TreeNode* pNode3 = MakeTreeNode(3);
        TreeNode* pNode4 = MakeTreeNode(4);
        TreeNode* pNode5 = MakeTreeNode(5);
        TreeNode* pNode6 = MakeTreeNode(6);
        TreeNode* pNode7 = MakeTreeNode(7);
        
        //connect Nodes
        ConnectTreeNodes(pNode1, pNode2, pNode3);
        ConnectTreeNodes(pNode2, pNode4, pNode5);
        ConnectTreeNodes(pNode3, NULL,   pNode6);
        ConnectTreeNodes(pNode5, pNode7,  NULL );
        
        int depth = maxDepth(pNode1);
        
        NSLog(@"maxDepth is %d", depth);
    }
}



TreeNode* MakeTreeNode(int x)
{
    TreeNode *node = malloc(sizeof(TreeNode));
    node->val   = x;
    node->left  = NULL;
    node->right = NULL;
    return node;
}

void ConnectTreeNodes(TreeNode* pParent,TreeNode* pLeft,TreeNode* pRight)
{
    if(pParent!=NULL)
    {
        pParent->left  = pLeft;
        pParent->right = pRight;
    }
}

int maxDepth(TreeNode* root) 
{
    return root==NULL?0:1+MAX(maxDepth(root->left),maxDepth(root->right));
}
相關文章
相關標籤/搜索