牛客网 二叉树遍历 清华大学上机题 给出先序遍历建立二叉树并输出中序遍历 计算机考研机试指南整理

二叉树遍历

#include <cstdio>
#include <iostream>
#include <string>
#include <queue> 

using namespace std;

void visit(char c){
	cout<<c<<" ";
	return ;
}

struct TreeNode{
	char data;
	TreeNode* leftchild;
	TreeNode* rightchild;
	TreeNode(char c):data(c),leftchild(NULL),rightchild(NULL){} //构造函数  nullptr;
};

void PreOrder(TreeNode* root){
	if(root == NULL){
		return;
	}
	visit(root->data);
	PreOrder(root->leftchild);
	PreOrder(root->rightchild);
	return;
}

void InOrder(TreeNode* root){
	if(root == NULL){
		return;
	}
	InOrder(root->leftchild);
	visit(root->data);
	InOrder(root->rightchild);
	return;
}

void PostOrder(TreeNode* root){
	if(root == NULL){
		return;
	}
	PostOrder(root->leftchild);
	PostOrder(root->rightchild);
	cout<<root->data;
	return;
}

void LevelOrder(TreeNode* root){
	queue<TreeNode*>myQueue;
	if(root != NULL){
		myQueue.push(root);
	}
	while(!myQueue.empty()){
		TreeNode* current =myQueue.front();
		myQueue.pop();
		visit(current->data);
		if(current->leftchild!= NULL){
			myQueue.push(current->leftchild);
		}
		if(current->rightchild != NULL){
			myQueue.push(current->rightchild);
		}
	}
	return;
}

TreeNode* Build(int& position,string str){ //给出先序遍历字符串建立二叉树  position 使用引用,会发生改变。 
	char c = str[position++]; 
	if(c == '#'){
		return NULL;
	} 
	TreeNode* root = new TreeNode(c); //建立新的结点,c为根节点。
	root->leftchild = Build(position,str);
	root->rightchild = Build(position,str);
	return root;
}

int main(void){
	string str;
	while(cin>>str){
		int position = 0 ;
		TreeNode* root = Build(position,str);
		InOrder(root);
		cout<<endl;
	}
	return 0;
}

这里给出的二叉树先序遍历序列,通过字符的位置来建立二叉树。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值