二叉树刷题篇平衡二叉树与二叉树的所有路径
Posted 归宅观察部
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树刷题篇平衡二叉树与二叉树的所有路径相关的知识,希望对你有一定的参考价值。
110. 平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
https://leetcode-cn.com/problems/non-decreasing-array/
class Solution {
public:
int height(TreeNode* node) {
if (node == NULL) {
return 0;
}
else {
return (max(height(node->left), height(node->right)) + 1);
}
}
bool isBalanced(TreeNode* root) {
if (root == NULL) {
return true;
} else {
return abs(height(root->left) - height(root->right)) <= 1 && isBalanced(root->left) && isBalanced(root->right);
}
}
};
257. 二叉树的所有路径
给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。
https://leetcode-cn.com/problems/binary-tree-paths/
class Solution {
private:
void traversal(TreeNode* cur, vector<int>& path, vector<string>& result) {
path.push_back(cur->val);
// 这才到了叶子节点
if (cur->left == NULL && cur->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);
return;
}
if (cur->left) {
traversal(cur->left, path, result);
path.pop_back(); // 回溯
}
if (cur->right) {
traversal(cur->right, path, result);
path.pop_back(); // 回溯
}
}
public:
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> result;
vector<int> path;
if (root == NULL) return result;
traversal(root, path, result);
return result;
}
};
//代码来自公众号 代码随想录 作者为Carl
以上是关于二叉树刷题篇平衡二叉树与二叉树的所有路径的主要内容,如果未能解决你的问题,请参考以下文章