Leetcode Balanced Binary Tree

来源:互联网 发布:局域网网络监控工具 编辑:程序博客网 时间:2024/06/07 07:15

Given a binary tree, determine if it is height-balanced.

For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees ofevery node never differ by more than 1.


代码如下:

/** * 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:    bool isBalanced(TreeNode* root) {        if(root == NULL)            return true;        int left = depth(root->left,1);        int right = depth(root->right,1);        return isBalanced(root->left) && isBalanced(root->right) && abs(left-right)<2;    }        int depth(TreeNode* root,int count)    {        if(root == NULL)            return count;        int left = depth(root->left,count+1);        int right = depth(root->right,count+1);        return left>right?left:right;    }};



这个排名也是醉了,写代码的时候就该算法存在不少重复计算,效率低下。现对上述代码进行优化,需要注意传入的count参数再函数调用后需要实时使用,所以需要使用引用,否而只会在传参的时候复制而不改变原来的变量值。优化后代码如下:

class Solution {public:    bool isBalanced(TreeNode* root) {        int h=0;        return depth(root,h);    }        bool depth(TreeNode* root,int& count)    {        if(root == NULL)        {            count = 0;            return true;        }        int left,right;        if(depth(root->left,left) && depth(root->right,right) && abs(left-right)<2)        {            count = 1+(left>right?left:right);            return true;        }                return false;    }};



原创粉丝点击