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

2021-10-23 16:18:06 字數 840 閱讀 4905

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

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

在這裡主要設定計數器cnt==1表示當前遍歷到第幾個結點,當其等於k的時候就將當前的根節點賦值為res, 這裡使用呢引用傳參的方式使得cnt和res充當全域性變數,如果在類外使用res和cnt宣告為全域性變數的話,則多次執行容易出錯。

class solution 

else cnt++;

preorder(root->left, k, res, cnt);

}int kthlargest(treenode* root, int k)

};

也可以將cnt和res充當類的成員變數

class solution 

else cnt++;

preorder(root->left, k);

}int kthlargest(treenode* root, int k)

};

使用迭代進行中序遍歷二叉樹。

class solution 

treenode* node = s.top();

cnt++;

if(cnt==k) return node->val;

s.pop();

root = node->left;

}return 0;

}};

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

給定一棵二叉搜尋樹,請找出其中第k大的結點。include includetypedef int datatype typedef struct bstreenodebstreenode 建立二叉搜尋樹 int bstreeinsert2 bstreenode root,datatype key i...

劍指 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 二叉搜尋樹,若任意節點的左子樹不空,則左子樹上所有節點的值均小於它的根節點的值 若任意節點的右子樹不空,則右子樹上所有節點的值均大於它的根節點的值 ...