LeetCode Algorithm 剑指 Offer II 056. 二叉搜索树中两个节点之和

Posted _Alex_007

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Algorithm 剑指 Offer II 056. 二叉搜索树中两个节点之和相关的知识,希望对你有一定的参考价值。

剑指 Offer II 056. 二叉搜索树中两个节点之和

Ideas

这题有点类似一个组合题,首先是通过二叉树遍历得到一个序列,然后再通过LeetCode Algorithm 1. 两数之和的方法查找是否存在两数之和就OK了。

二叉树的遍历直接默写模板,然后查找两数之和可以通过哈希表实现。

Code

C++

class Solution 
public:
	vector<int> preorder_traversal(TreeNode* node) 
		vector<int> ans;
		stack<TreeNode*> stk;
		stk.push(node);
		while (!stk.empty()) 
			TreeNode* item = stk.top();
			stk.pop();
			ans.push_back(item->val);
			if (item->right != nullptr) 
				stk.push(item->right);
			
			if (item->left != nullptr) 
				stk.push(item->left);
			
		
		return ans;
	
    bool findTarget(TreeNode* root, int k) 
		if (!root) 
			return false;
		
		vector<int> preorder_list = preorder_traversal(root);
		
		unordered_map<int, int> hash_table;
		for (int i = 0; i < preorder_list.size(); i++) 
			auto flag = hash_table.find(k - preorder_list[i]);
			if (flag != hash_table.end()) 
				return true;
			
			hash_table[preorder_list[i]] = i;
		
		return false;
    
;

以上是关于LeetCode Algorithm 剑指 Offer II 056. 二叉搜索树中两个节点之和的主要内容,如果未能解决你的问题,请参考以下文章