目录
4. 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先
1. 二叉树创建字符串
题目
给你二叉树的根节点 root
,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。
空节点使用一对空括号对 "()"
表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。
分析
如下图所示
这道题要求打印出表示二叉树关系的字符串,这样应该很简单,但是又要求省略掉不必要的空括号,这就需要判断什么情况下的括号是不必要的括号,很显然,如果一个结点的左子树为空,但是右子树不为空,这时候代表左子树的那个括号就一定不能省略,在其他情况下则都是可以省略的,根据这些我们可以写出如下代码
代码
class Solution {
public:
string tree2str(TreeNode* root) {
string ret;
if(root==nullptr)
return "";
ret+=to_string(root->val);
//当左子树不为空
if(root->left)
{
ret+="(";
ret+=tree2str(root->left);
ret+=")";
}
//当左子树为空,右子树不为空
if(root->right&&root->left==nullptr)
{
ret+="()";
}
//当右子树不为空
if(root->right)
{
ret+="(";
ret+=tree2str(root->right);
ret+=")";
}
return ret;
}
};
2. 二叉树的分层遍历1
题目
给你二叉树的根节点 root
,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
分析
这道题就是对二叉树进行层序遍历,即根据深度来依次遍历,遍历完上一层的所有结点才能访问下一层的。
这时候我们需要一个变量levelsize来帮助我们记录当前深度下一共有多少个结点,来帮助我们能