前序遍历构建二叉树是根据根节点/左节点/右节点的方式输入数据,针对一个节点来说,首先输入的是根节点,根节点之后的数值应该是其左子节点,之后是右节点,如果是递归,则首先是一直设置左节点,之后再依次设置右节点。
之前在看二叉树过程中,见过最多的是输入个位数字构建二叉树,今天看到一个可以输入多个数字的输入方式(《剑指offer第37题--序列化与反序列化二叉树》),Mark一下。
该方法是设置一个缓存区ch,依次读取命令窗口的内容内容,分割符号是‘,’,如果遇到‘,’就将读取到的字符转化为int数据(使用atoi函数),如果遇到‘#’,则该将该节点设置为空,具体代码如下:
#include "stdafx.h"
#include <iostream>
using namespace std;
typedef struct BinaryTreeNode{
int m_pValue;
BinaryTreeNode*m_pLeft;
BinaryTreeNode*m_pRight;
};
void Deserialize(BinaryTreeNode**pRoot){
int number;
char buffer[32];
buffer[0] = '\0';
char ch;
cin.get(ch);
int i = 0;
while (ch != ','&&ch!='\n')
{
buffer[i++] = ch;
cin.get(ch);
}
bool isNumberic = false;
if (i > 0 && buffer[0] != '$'){
number = atoi(buffer);
isNumberic = true;
}
if (isNumberic){
*pRoot = new BinaryTreeNode();
(*pRoot)->m_pValue = number;
(*pRoot)->m_pLeft = nullptr;
(*pRoot)->m_pRight = nullptr;
Deserialize(&((*pRoot)->m_pLeft));
Deserialize(&((*pRoot)->m_pRight));
}
}
int _tmain(int argc, _TCHAR* argv[])
{
BinaryTreeNode*pRoot = (BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));
Deserialize(&pRoot);
system("pause");
return 0;
}