面试题70:二叉搜索树第K大的结点*

来源:互联网 发布:万方—中国机构数据库 编辑:程序博客网 时间:2024/06/03 10:35

题目:

给定一棵二叉搜索树,请找出其中的第K大的结点。

思路:

按中序遍历的顺序遍历二叉树,可以找到第K大的结点。

#include <iostream>    #include <vector>    #include <stack>using namespace std;struct Node{int val;Node *left;Node *right;Node(int _val) :val(_val), left(NULL), right(NULL){}};Node *FindKthNode(Node *root, int &k){if (root == NULL || k == 0) return NULL;Node* target = NULL;if (root->left) target=FindKthNode(root->left, k);if (target == NULL){if (k == 1) target = root;k--;}if (target == NULL && root->right)target = FindKthNode(root->right, k);return target;}int main(){Node *n1 = new Node(5);Node *n2 = new Node(3);Node *n3 = new Node(7);Node *n4 = new Node(2);Node *n5 = new Node(4);Node *n6 = new Node(6);Node *n7 = new Node(8);Node *n8 = new Node(10);n1->left = n2;n1->right = n3;n2->left = n4;n2->right = n5;n3->left = n6;n3->right = n7;n7->right = n8;int k = 9;Node *re = FindKthNode(n1,k);if(re) cout << re->val << endl;return 0;}


0 0
原创粉丝点击