二叉平衡树

来源:互联网 发布:算法设计与分析第二版 编辑:程序博客网 时间:2024/06/09 22:37

分治,递归。
这道题有两种好方法。

  • 方法1:先有一个求深度depth的函数,然后递归比较各个节点的depth之差,返回结果。

C++代码:

class Solution {  public:      /**      * @param root: The root of binary tree.      * @return: An integer      */      int maxPathSum(TreeNode *root) {          // write your code here          int ret = INT_MIN;          onePath(root,ret);          return ret;      }      int onePath(TreeNode* root,int&ret)      {          if(root==nullptr)              return 0;          int l = onePath(root->left,ret);          int r = onePath(root->right,ret);          ret = max(ret,max(0,l)+max(0,r)+root->val);          return max(0,max(l,r))+root->val;      }  }; 
  • 方法2:深度优先搜索根节点,遇到不合格的节点,及时反馈,这样可以迅速得出结果,时间复杂度小。

C++ 代码:

/** * Definition of TreeNode: * class TreeNode { * public: *     int val; *     TreeNode *left, *right; *     TreeNode(int val) { *         this->val = val; *         this->left = this->right = NULL; *     } * } */class Solution {public:    /**     * @param root: The root of binary tree.     * @return: True if this Binary tree is Balanced, or false.     */    bool isBalanced(TreeNode *root) {        if (root == NULL) {            return true;        }        if (dfs(root)>0) {            return true;        }        return false;    }    int dfs(TreeNode * root) {        if (root==NULL) {            return 0;        }        int left = dfs(root->left);        int right = dfs(root->right);        if (left<0 || right<0 || abs(left-right)>1) {            return -1;        }         return max(left,right) + 1;    }};
0 0
原创粉丝点击