[保研/考研机试] KY11 二叉树遍历 清华大学复试上机题 C++实现

题目链接:

二叉树遍历_牛客题霸_牛客网编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/437195121692547007478

描述

编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中"#"表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。

输入描述:

输入包括1行字符串,长度不超过100。

输出描述:

可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。 每个输出结果占一行。

示例1

输入:

cpp 复制代码
abc##de#g##f###

输出:

cpp 复制代码
c b e g d f a 

源代码:

cpp 复制代码
#include<iostream>
#include<string>
using namespace std;

//例题10.1 二叉树遍历
struct TreeNode {
	char data;
	TreeNode* leftChild;
	TreeNode* rightChild;
	TreeNode(char c): data(c), leftChild(NULL), rightChild(NULL){}
};

TreeNode* Build(int& pos, string str) {
	char c = str[pos++];
	if (c == '#') {
		return NULL;
	}
	TreeNode* root = new TreeNode(c);
	root->leftChild = Build(pos, str);
	root->rightChild = Build(pos, str);

	return root;
}

void Inorder(TreeNode* root) {
	if (root == NULL) {
		return;
	}
	Inorder(root->leftChild);
	cout << root->data << " ";
	Inorder(root->rightChild);

	return;
}

int main()
{
	string s;
	cin >> s;
	int pos = 0;
	TreeNode* root = Build(pos, s);
	Inorder(root);
	cout << endl;

	return 0;
}

提交结果:

相关推荐
YL200404264 分钟前
046二叉树展开为链表
数据结构·leetcode·链表
蝈理塘(/_\)大怨种27 分钟前
快速排序的三路划分和自省排序
数据结构·算法
Peter·Pan爱编程29 分钟前
继承不是“拿来用“:is-a 关系与组合
c++
qq_296553271 小时前
矩阵转置的两种实现方式:从暴力法到原地算法
数据结构·线性代数·算法·青少年编程·矩阵
.小小陈.1 小时前
Linux 多线程进阶:线程互斥、同步、线程池、死锁与线程安全、读写锁、自旋锁
linux·开发语言·c++
lingran__1 小时前
C++入门基础
开发语言·c++
shylyly_1 小时前
内存函数的使用和实现
数据结构·算法
代码改善世界1 小时前
【C++进阶】二叉搜索树
java·数据结构·c++
春蕾夏荷_7282977252 小时前
c++ 编译abseil-cpp
c++·abseil-cpp
如竟没有火炬2 小时前
至少有K个重复字符的最长子串
开发语言·数据结构·python·算法·leetcode·动态规划