剑指 Offer 55 - II. 平衡二叉树 dfs
地址 https://leetcode-cn.com/problems/ping-heng-er-cha-shu-lcof/
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 返回 true 。 示例 2: 给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3 / \ 4 4 返回 false 。 限制: 0 <= 树的结点个数 <= 10000 注意:本题与主站 110 题相同:https://leetcode-cn.com/problems/balanced-binary-tree/
解答
树的遍历 参数中额外添加该节点的左子树和右子树的深度
那么在遍历完回溯的过程中 就可以判断每个节点的左右子树的深度差
如果任意节点的深度差不满足平衡条件 那么就将答案置为false
如图
1
/ \
2 2
/ \
3 3
/ \
4 4
/** * 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 ans = true; int dfs(TreeNode* root,int deep){ if(root==NULL) return deep; int l = dfs(root->left,deep+1); int r = dfs(root->right,deep+1); if(ans == false ) return -1; if( abs(l-r)> 1) { ans =false; return -1;} return max(l,r); } bool isBalanced(TreeNode* root) { if(root==NULL) return true; int l = dfs(root->left,0); int r = dfs(root->right,0); if(ans == false ) return ans; if(abs(l-r) <= 1) return true; return false; } };
作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
![阿里打赏](https://files.cnblogs.com/files/itdef/ali2.bmp)
![微信打赏](https://files.cnblogs.com/files/itdef/weixin2.bmp)