110.平衡二叉树
题目
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
示例
class Solution {
public:
int gethight(TreeNode* node)
{
if (node == NULL)
{
return 0;
}
int lefthigh = gethight(node->left);
if(lefthigh == -1)
{
return -1;
}
int righthigh = gethight(node->right);
if(righthigh == -1)
{
return -1;
}
return abs(lefthigh - righthigh) > 1 ? -1 : 1 + max(lefthigh, righthigh);
}
bool isBalanced(TreeNode* root) {
if (gethight(root) == -1)
{
return false;
}
else
{
return true;
}
}
};
257. 二叉树的所有路径
题目
给你一个二叉树的根节点 root
,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
示例
输入:root = [1,2,3,null,5]
输出:["1->2->5","1->3"]
class Solution {
public:
void trave(TreeNode* node, vector<int>& path, vector<string>& result)
{
path.push_back(node->val);
if (node->left == NULL && node->right == NULL)
{
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);
}
if (node->left)
{
trave(node->left, path, result);
path.pop_back();
}
if (node->right)
{
trave(node->right, path, result);
path.pop_back();
}
}
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> result;
vector<int>path;
if (root == NULL)
{
return result;
}
trave(root, path, result);
return result;
}
};
404.左叶子之和
题目
给定二叉树的根节点 root
,返回所有左叶子之和
示例
输入: root = [3,9,20,null,null,15,7]
输出: 24
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
class Solution {
public:
int sumOfLeftLeaves(TreeNode* root) {
int result = 0;
stack<TreeNode*>st;
st.push(root);
while(!st.empty())
{
TreeNode* node = st.top();
st.pop();
if (node->left != NULL && node->left->left == NULL && node->left->right == NULL)
{
result += node->left->val;
}
if (node->right) st.push(node->right);
if (node->left) st.push(node->left);
}
return result;
}
};