构建二叉树

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

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值