二叉树算法c语言,c++二叉树的基本操作
【二叉树】
写在前面
中序遍历归并1305、两棵二叉搜索树中的所有元素持续更新中… ?人的才能像挂钟一样,如果停止了摆动,就要落后了~
博客内容
中序遍历归并1305、两棵二叉搜索树中的所有元素
类别解决方案{
void inorder(TreeNode *node,vector int res) {
如果(节点){
inorder(node- left,RES);
RES . push _ back(节点值);
inorder(node- right,RES);
}
}
公共:
vector int获取所有元素(TreeNode * root 1,TreeNode *root2) {
向量int nums1,nums2
//中序遍历获得两棵树的元素升序数组
inorder(root1,nums 1);
inorder(root2,nums 2);
//归并排序两个升序数组
矢量(同Internationalorganizations)国际组织合并;
auto p1=nums1.begin(),p2=num S2。begin();
while (true) {
if (p1==nums1.end()) {
merged.insert(merged.end(),p2,nums 2。end());
打破;
}
if (p2==nums2.end()) {
merged.insert(merged.end()、p1、num S1。end());
打破;
}
if (*p1 *p2) {
合并了。push _ back(* P1);
}否则{
合并了。push _ back(* p2);
}
}
返回合并的;
}
};/**
*二叉树节点的定义。
*结构树节点{
* int值
* TreeNode * left
* TreeNode *右
* TreeNode() : val(0),left(nullptr),right(nullptr) {}
* TreeNode(int x) : val(x),left(nullptr),right(nullptr) {}
* TreeNode(int x,TreeNode *left,TreeNode *right) : val(x),left(左),对吧(右){}
* };
*/
类别解决方案{
向量整数1
向量整数2
公共:
void dfs(TreeNode* node,vector int nums) {
//结束
if(node==nullptr) {
返回;
}
//左中右,中序遍历
dfs(左节点,nums);
nums。push _ back(node-val);
dfs(右节点,nums);
返回;
}
vector int获取所有元素(TreeNode * root 1,TreeNode* root2) {
dfs(root1,nums 1);
dfs(root2,nums 2);
//归并,两数组均升序
矢量判断是否需要交叉
int i=0,j=0;
而(我num S1。尺码()j号S2。size()){
if(nums1[i]=nums2[j]) {
ans。push _ back(num S1[I]);
我;
}否则{
ans。push _ back(nums 2[j]);
j;
}
}
while(i nums1.size()){
ans。push _ back(num S1[I]);
我;
}
while(j nums2.size()){
ans。push _ back(nums 2[j]);
j;
}
返回美国国家标准(American National Standards的缩写)
}
};
知识点:
merged.insert(merged.end()、p1、num S1。end());数组合并
写在后面
加油
乐观是一首激昂优美的进行曲,时刻鼓舞着你向事业的大路勇猛前进!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。