/**
* 二叉搜索樹的第k大節點
*
* @param root
* @return
*/
public TreeNode kthNode(TreeNode root, int k) {
int count = 0;
TreeNode cur = root;
while (cur != null) {
TreeNode mostRight = cur.left;
if (null != mostRight) {
//如果有左孩子,mostRight指向左孩子最右的節點
while (mostRight.right != null && mostRight.right != cur) {
mostRight = mostRight.right;
}
if (mostRight.right == null) {
//mostRight不等於cur,mostRight右孩子設置爲cur,cur左移
mostRight.right = cur;
cur = cur.left;
continue;
} else {
//mostRight等於cur,mostRight右孩子設置爲null
mostRight.right = null;
}
}
count++;
if (count == k) return cur;
//如果沒有左孩子,當前節點右移
cur = cur.right;
}
return null;
}
劍指Offer學習-面試題54:二叉搜索樹的第k大節點
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.