劍指:由前序遍歷和中序遍歷重建二叉樹

題目:由前序遍歷和中序遍歷重建二叉樹(前序序列:1 2 3 4 5 6 - 中序序列:3 2 4 1 6 5) 

思想:


代碼如下:

	Node* Rebuild(T prev[], T in[],int l, int r)  //l爲數組的開始開始位置的下標,r爲數組最尾部數字的下標
	{
		if (_root != NULL)
		{
			Destroy(_root);
			_root = NULL;
		}
		int n = 0;
		_Rebuild(_root,prev, in, l, r,n);//遞歸重建二叉樹
		return _root;
	}

private:
	void _Rebuild(Node*& root, T prev[], T in[], int l, int r, int& n)
	{
		if (l <= r)
		{
			root = new Node(prev[n]);
		}
		else
		{
			root = NULL;
			return;
		}
		int begin = l;
		for (int i = l; i <= r; i++)
		{
			if (in[i] == prev[n])
			{
				l = i;
				++n;
				break;
			}
		}
		_Rebuild(root->_left, prev, in, begin, l-1,n);
		_Rebuild(root->_right, prev, in, l+1, r,n);

	}
   root傳引用的原因:因爲在遞歸的下一層new的新結點要連接到上一層結點的左孩子上或者右孩子上,則下一層的root等於上一層的root->_left / root->_right

   n傳引用的原因:因爲n的變化影響整體,先序數組arr1[]只有被new之後纔可以向後移動,否則n不變。


發佈了85 篇原創文章 · 獲贊 148 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章