华为机试(根据中序遍历和后序遍历的结果构造二叉树)

二叉树每个节点由一个大写字母标识(最多26个节点)。现在有两组字母,分别表示后序遍历(左孩子->右孩子->父节点)和中序遍历(左孩子->父节点->右孩子)的结果,请输出层次遍历(逐层遍历)的结果。

输入描述:

输入为两个字符串,分别是二叉树后序和中序遍历的结果

输出描述:

输出二叉树的层次遍历结果

示例1:

输入

CBEFDA CBAEDF

输出

ABDCEF

————————————————

#include<stdio.h>

#include<malloc.h>

#include<stdlib.h>

#include<string.h>

typedef struct tree

{

char value;

tree*left;

tree*right;

};

//中序遍历和后序遍历的结果

char*end;

char*mid;

void createTree(tree*node, char *mid, char *end)

{

int count = strlen(end);

if (count <= 0)

{

node->left =nullptr;

node->right = NULL;

return;

}

node->value = end[count-1];

int valueIndex = 0;

//在中序遍历的结果里找到值为end[count]的元素,返回下标

for (int i = 0; i < count; i++)

{

char a = mid[i];

char b = end[count - 1];

if (a == b)

{

valueIndex = i;

break;

}

}

//(生成)判断左右树大小,当前节点是否还有子树

char*leftmid = (char*)malloc(sizeof(char)*(valueIndex + 1));

char*leftend = (char*)malloc(sizeof(char)*(valueIndex + 1));

memset(leftmid, '\0', count + 1);

memset(leftend, '\0', count + 1);

memcpy(leftmid, mid, valueIndex);

memcpy(leftend, end, valueIndex);

char*rightmid = (char*)malloc(sizeof(char)*(count - valueIndex));

char*rightend = (char*)malloc(sizeof(char)*(count - valueIndex-1));

memset(rightmid, '\0', count - valueIndex);

memset(rightend, '\0', count - valueIndex);

memcpy(rightmid, &mid[valueIndex+1], count - valueIndex-1);

memcpy(rightend, &end[valueIndex], count - valueIndex-1);

node->left = (tree*)malloc(sizeof(tree));

node->right = (tree*)malloc(sizeof(tree));

createTree(node->left, leftmid, leftend);

createTree(node->right, rightmid, rightend);

}

int main()

{

char a[] = { '4', '2', '6', '5', '3', '1','\0'};

end = a;

char b[] = { '2', '4', '1', '6','5', '3', '\0' };

mid = b;

tree root = { 1, NULL, NULL };

createTree(&root, mid, end);

return 0;

}

全部评论
这里主要是生成一颗树,广度优先可以参考另外一篇帖子
点赞 回复 分享
发布于 2023-06-27 16:22 浙江

相关推荐

24分钟1.自我介绍2.黑盒测试用例设计方法3.运用刚才的测试方法对手机端淘宝购物车结算页面进行测试4.测试流程5.需求文档没有标明边界值,怎么确定边界值,确定边界值后怎么测6.你们公司自动化测试是测业务主流程还是新需求反问:不足之处答:问答问题前思考3s再答,针对提问再答
一笑而过2222:边:边界值分析法(处理输入边界) 类:等价类划分法(划分有效 / 无效输入) 定:判定表法(多条件组合的逻辑判定) 因:因果图法(分析输入输出的因果关系) 迁:状态迁移法(覆盖系统状态转换路径) 场:场景法(模拟端到端业务流程) 正:正交试验法(多因素组合的测试优化) 错:错误推测法(基于经验推测潜在漏洞) 记忆逻辑链(按测试场景优先级排序) 先处理明确输入:边界值 + 等价类(边类) 再处理条件组合:判定表 + 因果图(定因) 接着处理状态与流程:状态迁移 + 场景法(迁场) 最后优化多因素与补漏:正交试验 + 错误推测(正错)
查看6道真题和解析
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-20 20:15
点赞 评论 收藏
分享
迷茫的大四🐶:自信一点,我认为你可以拿到50k,低于50k完全配不上你的能力,兄弟,不要被他们骗了,你可以的
点赞 评论 收藏
分享
评论
3
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务