题解 | #二叉树遍历#

二叉树遍历

http://www.nowcoder.com/practice/4b91205483694f449f94c179883c1fef

【C++】已通过

#include<string>
using namespace std;
class BTNode {
public:
	char value;//节点值
	BTNode *l;//左孩子
	BTNode *r;//右孩子
	BTNode() {
		value = '0';
		l = NULL;
		r = NULL;
	}
	~BTNode() {
		this->l = NULL; this->r = NULL;
		delete(this);
	}
};
//利用先序遍历构建二叉树
void initBT(BTNode * root) {
	
	//访问结点值
	
	//访问左子树
	char temp = cin.get();
	if (temp == '#') {
		root->l = NULL;
	}
	else {
		BTNode *btn1 = new BTNode();
		btn1->value = temp;
		root->l = btn1;
		initBT(root->l);//接着对左子树先序遍历
	}
	
	//访问右子树
	temp = cin.get();
	if (temp == '#') {
		root->r= NULL;
	}
	else {
		BTNode *btn2 = new BTNode();
		btn2->value = temp;
		root->r = btn2;
		initBT(root->r);//接着对右子树先序遍历
	}

}
//中序遍历并进行输出
void inOrderTravel(BTNode * root) {
	if (root == NULL)return;//空结点,直接返回
	//访问左子树
	if (root->l != NULL) {
		inOrderTravel(root->l);//访问左子树
	}
	//访问结点值
	cout << root->value << " ";
	//访问右子树
	if (root->r != NULL) {
		inOrderTravel(root->r);//访问右子树
	}
}
int main() {
	
	char c = cin.get();
	BTNode *root = new BTNode();
	root->value = c;
	initBT(root);//构建二叉树
	inOrderTravel(root);//中序遍历,并且输出中序序列
	cout << endl;
	return 0;
}
全部评论

相关推荐

路过的咸蛋超人也想拿offer:你是我见过最美的牛客女孩
点赞 评论 收藏
分享
05-12 16:04
已编辑
江西财经大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务