劍指offer 二叉搜尋樹的第k個節點

2021-08-07 12:02:45 字數 731 閱讀 6472

&esmp;&esmp;給定一顆二叉搜尋樹,請找出其中的第k大的結點。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按結點數值大小順序第三個結點的值為4。

&esmp;&esmp;首先一點要清晰二叉搜尋樹的特點,也就是:左孩子《父節點《右孩子。所以,根據這一特點可知,二叉搜尋樹的中序遍歷結果就是乙個公升序的序列。題目中的例項可知,是將二叉搜尋樹的元素公升序排列後找到第k個元素。

&esmp;&esmp;思路就是從根節點一直遍歷左孩子,如果左子樹的遍歷中有遍歷結果,就返回結果,如果結果null則進行下一步判斷 –> 首先對計數器加一(即null的葉子節點為零),然後判斷當前節點是不是目標節點,通過比較計數器cnt和k,如果相等,當前節點極為目標節點,如果不等就對其右子樹進行遍歷,返回右子樹的遍歷結果即可。

/*

struct treenode

};*/

class solution

if (answer !=

null)

return answer;

++cnt;

if (cnt == k)

return proot;

answer = kthnode(proot->right, k);

if (answer !=

null)

return answer;

return

null;

}};

劍指offer 二叉搜尋樹的第k個結點(二叉樹)

給定一棵二叉搜尋樹,請找出其中的第k小的結點。例如,5,3,7,2,4,6,8 中,按結點數值大小順序第三小結點的值為4。對於二叉搜尋樹,使用中序遍歷就能得到排序好的序列 每次訪問乙個節點,計數 1 直到計數為0時返回。struct treenode class solution treenode ...

劍指offer 二叉搜尋樹的第k個結點

二叉搜尋樹 根結點的值大於左子樹中任一結點的值,小於右子樹中任一結點的值。答案 二叉搜尋樹按照中序遍歷得到的結果就是遞增的序列,所以要找第k小結點,可以按照中序遍歷去查詢。如下 建立樹的結點 class node def init self,a 0 self.val a self.left none...

劍指offer 二叉搜尋樹的第k個結點

題目描述 給定一棵二叉搜尋樹,請找出其中的第k小的結點。例如,5,3,7,2,4,6,8 中,按結點數值大小順序第三小結點的值為4。思路 二叉搜尋樹按照中序遍歷的順序列印出來正好就是排序好的順序。方法一 設定乙個陣列,然後中序遍歷二叉樹,將節點依次加入到陣列中 struct treenode cla...