110 平衡二叉树
题目链接:平衡二叉树
思路
首先要明确下二叉树的高度和深度,高度是从叶节点开始,深度则是从根节点开始的。在104 二叉树的最大深度的那道题目中,树的深度和根节点的高度相等,所以使用了后序遍历。
这道题目是判断二叉树是否是平衡二叉树(左右子树的高度小于等于1)。如果二叉树中某一个节点不是平衡二叉树,则这个数不是平衡二叉树。
class Solution {
public:int getHeight(TreeNode* node){if(node == nullptr) return 0;int leftHeight = getHeight(node->left);if(leftHeight == -1) return -1;int rightHeight = getHeight(node->right);if(rightHeight == -1) return -1;int result;if(abs(leftHeight - rightHeight) > 1){result = -1;}else{result = 1 + max(leftHeight, rightHeight);}return result;}bool isBalanced(TreeNode* root) {return getHeight(root) == -1 ? false:true;}
};
257 二叉树的所有路径
题目链接:二叉的所有路径
思路
递归现在慢慢有一点感觉了,但是感觉不多。
class Solution {
public:void traversal(TreeNode* node, vector<int>&path, vector<string>& result){path.push_back(node->val);if(node->left == nullptr && node->right == nullptr){string sPath;for(int i=0; i<path.size()-1; i++){sPath += to_string(path[i]);sPath += "->";}sPath += to_string(path[path.size()-1]);result.push_back(sPath);return;}if(node->left){traversal(node->left,path,result);path.pop_back();}if(node->right){traversal(node->right, path, result);path.pop_back();}}vector<string> binaryTreePaths(TreeNode* root) {vector<string> result;vector<int> path;if(root==nullptr) return result;traversal(root, path, result);return result;}
};
/
404 左子叶之和
题目链接:左子叶之和
思路
还没有搞清递归,看这些题也无感。
class Solution {
public:int sumOfLeftLeaves(TreeNode* root) {if(root == nullptr) return 0;if(root->left == nullptr && root->right == nullptr) return 0;int leftValue = sumOfLeftLeaves(root->left);if(root->left && !root->left->left && !root->left->right){leftValue = root->left->val;} int rightValue = sumOfLeftLeaves(root->right);int sum = leftValue + rightValue;return sum;}
};
参考链接
- https://programmercarl.com/0110.%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE