劍指offer 54 二叉搜尋樹的第K大結點

2021-09-21 02:14:18 字數 650 閱讀 1465

給定一棵二叉搜尋樹,請找出其中第k大的結點。

#include#includetypedef int datatype;

typedef struct bstreenodebstreenode;

//建立二叉搜尋樹

int bstreeinsert2(bstreenode **root, datatype key)

if (key == (*root)->key)

else if (key < (*root)->key)

else

}

按照中序遍歷的順序遍歷一棵二叉搜尋樹,則它的遍歷的數值是從小到大依次遞增的。中序遍歷一棵二叉樹,定義乙個全域性變數count,每當二叉搜尋樹遍歷完乙個結點時count加1。當count==k時,說明已經找到第k大個結點,列印其key值即可。

**如下:

static int count = 0;

void kthnode2(bstreenode *root, int k)

kthnode2(root->left, k);

count++;

if (count== k)

kthnode2(root->right, k);

}

劍指 Offer 54 二叉搜尋樹的第k大節點

給定一棵二叉搜尋樹,請找出其中第k大的節點。方法一 中序遍歷,然後取值 二叉搜尋數中序遍歷的結果就是乙個有序陣列,演算法也很容易寫。這裡使用了arraylist類 definition for a binary tree node.public class treenode class soluti...

劍指 Offer 54 二叉搜尋樹的第k大節點

劍指 offer 54.二叉搜尋樹的第k大節點 給定一棵二叉搜尋樹,請找出其中第k大的節點。輸入 root 3,1,4,null,2 k 1 輸出 4 二叉搜尋樹,若任意節點的左子樹不空,則左子樹上所有節點的值均小於它的根節點的值 若任意節點的右子樹不空,則右子樹上所有節點的值均大於它的根節點的值 ...

劍指 Offer 54 二叉搜尋樹的第k大節點

給定一棵二叉搜尋樹,請找出其中第k大的節點。由於是要求二叉搜尋樹的第k大的結點,對於二叉搜尋樹來說,其中序遍歷的結果就是遞增有序的結果,這裡需要注意,如果在中序遍歷的時候先遍歷右子樹的話,那麼這個得到的有序序列就是遞減有序的序列,由於本題是要求第k大的元素,那麼就要需要按照遞減的順序遍歷比較好。在這...