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