【C++】二叉树进阶面试题(上)

目录

1. 二叉树创建字符串

题目

分析

代码

2. 二叉树的分层遍历1

题目

分析

代码

3. 二叉树的分层遍历2

题目

分析

代码

4. 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先 

题目

分析

代码

5. 二叉树搜索树转换成排序双向链表

题目

分析

代码


1. 二叉树创建字符串

题目

OJ链接

给你二叉树的根节点 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

题目

OJ链接

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

分析

这道题就是对二叉树进行层序遍历,即根据深度来依次遍历,遍历完上一层的所有结点才能访问下一层的。

这时候我们需要一个变量levelsize来帮助我们记录当前深度下一共有多少个结点,来帮助我们能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_hhc_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值