看到题目的第一想法:用类似层序遍历的方法分别遍历root的左与右并记录深度,最后比较深度差大于一的话就返回false
看完代码随想录的想法:用后序遍历方便回退值给中节点,利用高度计算代替深度计算
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int getHeight(TreeNode* node) {
if (node == NULL) {
return 0;
}
int leftHeight = getHeight(node->left);
if (leftHeight == -1) return -1;
int rightHeight = getHeight(node->right);
if (rightHeight == -1) return -1;
return abs(leftHeight - rightHeight) > 1 ? -1 : 1 + max(leftHeight, rightHeight);
}
bool isBalanced(TreeNode* root) {
return getHeight(root) == -1 ? false : true;
}
};
看到题目的第一想法:用类似深度优先搜索的方法去遍历用字符串操作方法相加;采用前序遍历
看到题目的第一想法:深度或层序遍历都可,不过要加一个判断条件,如果cur->left不为空,则将该指针指向的数值存入动态数组中,最后将动态数组的数相加
222. 完全二叉树的节点个数 - 力扣(LeetCode)
看到题目的第一想法:深度或层序遍历都可,只要遇到节点且判断左右只要一个不为空就count++