[数据结构 & 算法] 二叉树的非递归根据先序序列建立

1. 二叉树非递归根据先序序列建立

比较简单的是二叉树递归的创建方法而非递归创建想起来有点难度,本质上是模拟函数栈的操作,所以要用到栈这一数据结构。
C++用到了STL里的栈,所以不用自己定义,而C语言需要自己定义栈容器,我用的是我之前写的栈容器稍加修改

2. C++代码

#include <iostream>
#include <stack>
#include <string>
using namespace std;
//二叉树节点
class node
{
   
public:
	node* left;//左孩子
	node* right;//右孩子
	char data;//数据
	node()
	{
   
		left = NULL;
		right = NULL;
	}
};


node* root;

/*
根据先序序列,非递归创建二叉树
大致思路就是利用栈模拟函数栈的过程
treeStr为先序序列的二叉树,#代表空
*/
void preCreate(node* &root,string treeStr)
{
   
	stack<node*> ns;
	node** now;
	if (treeStr[0] != '#')
	{
   
		root = new node();
		root->data = treeStr[0];
		now = &root->left;
	}
	//遍历每个字符
	for (int i = 1; i < treeStr.length(); i++)
	{
   
		//如果不为#,则新建一个节点,然后将当前节点调整为左孩子
		if (treeStr[i] != '#')
		{
   
			*now = new node();
			(*now)->data = treeStr[i];
			ns.push
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值