LeetCode 700 二叉搜索树中的搜索

题目: 给定二叉搜索树(BST)的根节点 root 和一个整数值 val。

你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。

示例 1:

输入:root = [4,2,7,1,3], val = 2
输出:[2,1,3]

示例 2:

输入:root = [4,2,7,1,3], val = 5
输出:[]

思路:

如果rootNULL或者root->valtarget时,返回root,如果root->val > target,递归左节点,如果root->val < target,递归右边。否则返回NULL。

struct TreeNode {
	int val;
	TreeNode* left;
	TreeNode* right;
	TreeNode(int x):val(x),left(NULL),right(NULL){}
};

class Solution {
public:
	TreeNode* subTree(TreeNode* root,int target) {
		if (root == NULL||root->val == target)return root;
		if (root->val > target) {
			return subTree(root->left, target);
		}
		else if (root->val < target) {
			return subTree(root->right, target);
		}
		return NULL;
	}
	void test(TreeNode* root) {
				queue<TreeNode*> que;
				if (root != NULL) {
					que.push(root);
				}
				while (!que.empty()) {
					int size = que.size();
					for (int i = 0; i < size;i++) {
						TreeNode* node = que.front();
						cout << node->val << " ";
						que.pop();
						if (node->left)que.push(node->left);
						if (node->right)que.push(node->right);
					}
					cout << endl;
				}
			}
};

int main() {
	TreeNode* A = new TreeNode(4);
	TreeNode* B = new TreeNode(2);
	TreeNode* C = new TreeNode(7);
	TreeNode* D = new TreeNode(1);
	TreeNode* E = new TreeNode(3);

	A->left = B;
	A->right = C;
	B->left = D;
	B->right = E;

	int target = 2;

	Solution ss;
	TreeNode* root = ss.subTree(A,target);
	ss.test(root);
	return 0;
}

你可能感兴趣的:(leetcode,算法,数据结构)