使用 C++ 在 BST 中查找第二大元素
在二叉搜索树 (BST) 中,必须返回第二大元素。在二叉树中,第二大元素是最大的元素。
根据给定的 BST,13 是第二大元素。现在我们使用 C++ 方法来解决这个问题。我们可以遍历树的中序遍历,通过观察,我们可以观察到给定 BST 中的第二大元素是 13。树的中序遍历将是 1 3 4 6 7 8 10 13 14,我们可以观察到元素位于排序数组中。因此,我们返回第二大元素。
让我们假设一些简单的输入和输出场景
假设二叉树中的元素如下所示。这里二叉搜索树中只有两个元素。通过比较节点的值,第二大的值为6。
Input = BST 11 / 6 Output = Second largest element in BST will be: 6
还可以考虑以下场景,因为下面有一个二叉搜索树,并且具有大量的节点。下面二叉树的输出将是
Input = BST 11 / \ 6 21 / \ 4 31 Output = Second largest element in BST will be: 21
算法
以下步骤是解决问题的方法。
实现二叉搜索树 (BST)。
将节点的值插入 BST。
使用中序遍历技术,左 -> 根 -> 右 (L-R-R)
然后使用[inorder.size()-2];在 BST 中找出第二大的节点值。
示例
以下是查找二叉搜索树中第二大元素的 C++ 代码:
#include <iostream> #include <vector> using namespace std; class Node { public: int val; Node *left, *right; Node(int val) { this->val = val; left = right = NULL; } }; void solve(Node* root, vector<int>& inorder) { if(root == NULL) return; solve(root->left, inorder); inorder.push_back(root->val); solve(root->right, inorder); } int main() { Node* root = new Node(8); root->left = new Node(3); root->right = new Node(10); root->left->left = new Node(1); root->left->right = new Node(6); root->left->right->left = new Node(4); root->left->right->right = new Node(7); root->right->right = new Node(14); root->right->right->left = new Node(13); vector<int> inorder; solve(root, inorder); cout << "Second largest element of this BST is : " << inorder[inorder.size()- 2]; return 0; }
输出
Second largest element of this BST is: 13
结论
这是一个纯粹基于观察的问题,我们需要观察树的中序遍历的模式。此算法的时间复杂度为中序遍历的 O(n)。
广告