其中中序非递归遍历较难理解,对其步骤做一解释:
从根节点开始遍历左儿子直至nullptr,并将其指针加入栈中
出栈向后退一步,保存当前栈顶指针所指向的二叉树值,并出栈
将根节点设置为前一步栈顶指针所指向的节点的右儿子
代码如下:
/**
*Copyright @ 2019 Zhang Peng. All Right Reserved.
*Filename:
*Author: Zhang Peng
*Date:
*Version:
*Description:
**/
#include<iostream>
#include<stack>
#include<string>
#include<deque>
using namespace std;
struct TreeNode
{
char val;
TreeNode * left;
TreeNode * right;
TreeNode(char x) :val(x), left(nullptr), right(nullptr){
};
};
void CreatTree(TreeNode * & tree, string str, int & index)
{
//前序遍历字符串建立树
if (index < str.size())
{
if (str[index] != '#')
{
tree = new TreeNode(str[index])