ツリーの構築

1428 ワード

フロントシーケンスループ構築ツリーは、ルートノード/左ノード/右ノードに基づいてデータを入力し、1つのノードに対してまずルートノードを入力し、ルートノードの後の数値はその左サブノードであり、その後は右ノードであり、再帰であればまず左ノードを常に設定し、その後右ノードを順次設定する.
以前、二叉木を見ていたとき、一番多かったのはビット数を入力して二叉木を構築したことですが、今日は複数の数字を入力できる入力方式を見ました(『剣指offer第37題--シーケンス化と逆シーケンス化二叉木』)、Markちょっと見てください.
この方法は、キャッシュ領域chを設定し、コマンドウィンドウの内容を順番に読み出し、分割記号は',','に遭遇すると、'に遭遇すると読み取った文字をintデータに変換し(atoi関数を使用)、'#'に遭遇すると、そのノードを空に設定し、ボディコードは以下の通りである.
#include "stdafx.h"
#include 
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!='
') { 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; }