给定一个二叉树的根节点 root
,返回 它的 中序 遍历 。
示例 1:
输入:root = [1,null,2,3] 输出:[1,3,2]
代码详解:这里我们直接使用递归来解决非常容易,在递归前进的时候遍历左子树,然后遍历根节点再递归回退的时候遍历右子树即可
class Solution {
public:
void travers(TreeNode* root,vector<int>&res)
{
if(!root)return;//使用递归的办法来遍历,如果根节点为空就返回
travers(root->left,res);//先左子树
res.push_back(root->val);
travers(root->right,res);//再右子树,总结为左根右
}
vector<int> inorderTraversal(TreeNode* root) {
vector<int>res;//用一个空数组来承接即可
travers(root,res);
return res;
}
};
面经:
1. c/c++中字符串的存储方式有何不同
C中,字符串是通过字符数组来存储的,以空字符(‘\0’)作为字符串的结束标志。例如,一个字符串"hello"在C语言中存储为 {‘h’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’}。
C++中,除了可以使用C语言的方式存储字符串外,还提供了string类。string类封装了字符数组,并提供了一系列操作字符串的成员函数,如长度计算、子串查找、字符串拼接等。string类的内部实现通常使用动态数组来存储字符,可以自动管理内存,避免了C语言中字符串操作的一些常见问题,如缓冲区溢出,减少内存泄漏的风险
2. c中如何比较两个字符串是否相等
#include<stdio.h>
#include<stdlib.h>
int str_cmp(char* str1, char* str2) {
if (str1 == NULL || str2 == NULL) {
return 2;
}
while (*str1 == *str2) {
if (*str1 == '\0') {
return 0;
}
str1++;
str2++;
}
return (*str1 > *str2) ? 1 : -1;
}
int main() {
char* str1 = "hello", * str2 = "hello";
printf("两字符串的关系为:%d", str_cmp(str1, str2));
return 0;
}//如果有字符串为空返回2,相等返回0,不相等的话,串1>串2返回1否则返回-1
当然在c++中提供了供我们操作字符串的各种函数,如:
#include<iostream>
using namespace std;
int main() {
string str = "A people of chicken";
string str1;
cout << str.length() << " " << str.size()<<endl;
cout << str.substr(2, 6)<<endl;//分割字符串,从下标2开始截取6个字符
cout << str.find("of")<<endl;//查找子串,并返回字串的位置
cout << str.replace(2, 6, "boy")<<endl; // 替换从下标2开始的6个字符为"boy"
str1 = str;// 复制 str1 到 str3
cout << str1 << endl;
string str2 = " CSDN";
cout << str + str2 << endl;//连接字符串可以用 + 号
}
输出结果如下:
标签:第十一天,return,str2,str1,冲刺,字符串,res,实习,root From: https://blog.csdn.net/m0_74381802/article/details/143457919