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

2021-09-26 13:46:09 字數 629 閱讀 9260

給定一棵二叉搜尋樹,請找出其中的第k小的結點。例如, (5,3,7,2,4,6,8)    中,按結點數值大小順序第三小結點的值為4。

/*

struct treenode

};*/

class solution

};

先讓根節點入棧,定義乙個指標p指向根節點,設定乙個計數器n,先找到最小的結點,即最左邊的結點,如果p不為空,則讓p入棧,p = p->left,若p為空,則說明找到最左邊的結點了,讓p指向棧頂元素,棧頂元素出棧,判斷是否為第k小元素,若是,則返回此時的結點指標,不是,則讓p = p->right,繼續迴圈,直至棧為空且此時指向結點為空。

注:**如下:

class solution 

else

}return null;

}};

思路:二叉搜尋樹按照中序遍歷的順序列印出來正好就是排序好的順序。所以,按照中序遍歷順序找到第k個結點就是結果。

(遞迴還是有點難理解的~)

c++實現**如下:

class solution 

};

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

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

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

esmp esmp 給定一顆二叉搜尋樹,請找出其中的第k大的結點。例如,5 3 7 2 4 6 8 中,按結點數值大小順序第三個結點的值為4。esmp esmp 首先一點要清晰二叉搜尋樹的特點,也就是 左孩子 父節點 右孩子。所以,根據這一特點可知,二叉搜尋樹的中序遍歷結果就是乙個公升序的序列。題目...

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

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