【LeetCode】106. 從中序與後序遍歷序列構造二叉樹

解題思路

類似於通過前序遍歷和中序遍歷思想
由於後序遍歷的最後一個元素一定是根節點,因此容易獲得根節點,再通過中序遍歷,可以知道左右子樹的位置及個數
對於中序遍歷的左右子樹,再遞歸進行構建

代碼

class Solution {
public:
	TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
		return create(inorder, postorder, 0, inorder.size() - 1, 0, postorder.size() - 1);
	}
	TreeNode* create(vector<int>& inorder, vector<int>& postorder, int inL,int inR, int postL, int postR)
	{
		if (postL > postR) return NULL;//遞歸邊界
		TreeNode* head = new TreeNode(postorder[postR]);
		//求後序遍歷根節點在中序遍歷中的位置
		int k;
		for (k=inL;k<=inR;k++)
		{
			if (inorder[k]==postorder[postR])
			{
				break;
			}
		}
		//右子樹結點的個數
		int numsRight = inR - k;
		head->left = create(inorder, postorder, inL, k - 1, postL, postR-numsRight-1);
		head->right = create(inorder, postorder, k + 1, inR, postR - numsRight, postR - 1);
		//返回根節點
		return head;
	}
};
發佈了99 篇原創文章 · 獲贊 19 · 訪問量 8168
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章