Find minimal subtree

给出一棵二叉树, 每个节点的值不相等。现给出几个值,如(2, 7, 8),找出从根节点开始包含这些值的最小子树。


递归来解,关键是判断是否包含某个节点 - 要么该节点的值在查找范围内,要么左子树或者右子树有节点在查找范围内。

TreeNode* getSubTree(TreeNode *root, set<int> &nums) {
	if (root == NULL || nums.empty()) {
		return NULL;
	}

	TreeNode *left = getSubTree(root->left, nums);
	TreeNode *right = getSubTree(root->right, nums);
	if (left || right || nums.find(root->val) != nums.end()) {
		TreeNode *subroot = new TreeNode(root->val);
		subroot->left = left;
		subroot->right = right;
		return subroot;
	}

	return NULL;
}


你可能感兴趣的:(二叉树)