平衡二叉树,c++
平衡二叉树
http://www.nowcoder.com/questionTerminal/8b3b95850edb4115918ecebdf1b4d222
class Solution { public: bool IsBalanced_Solution(TreeNode* pRoot) { auto res = find_deep(pRoot); if (res == -1) return false; else return true; } int find_deep(TreeNode* pRoot){ if (pRoot == nullptr) return 0; auto right = find_deep(pRoot->right); auto left = find_deep(pRoot->left); if (right == -1 || left == -1) return -1; if (abs(right - left) > 1) return -1 ; else return max(right, left) + 1; } };
平衡二叉树的性质是:是一颗空树或者左右高度差不超过1,且其子树都是平衡二叉树,由性质联想递归方法。
看了一下大家的思路,还是有点相似的。
1、递归函数的作用是判断当前节点的深度同时判断其是否为平衡树,
(1)当左右深度差值超过1,return -1;否则return 树深度
(2)若一个节点的一个子树已经不平衡,则直接返回 -1
2、感觉这样的递归在判断一个子树返回 -1后,其他线路的节点还在继续判断,不能提前终止,没想到啥好方法。
欢迎交流指正!!!