构建二叉树

前序遍历构建二叉树是根据根节点/左节点/右节点的方式输入数据,针对一个节点来说,首先输入的是根节点,根节点之后的数值应该是其左子节点,之后是右节点,如果是递归,则首先是一直设置左节点,之后再依次设置右节点。

之前在看二叉树过程中,见过最多的是输入个位数字构建二叉树,今天看到一个可以输入多个数字的输入方式(《剑指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;
}

 

上一篇:C指针之六:指针和结构体


下一篇:线程池ThreadPoolExecutor参数