劍指offer(C++)——二叉搜尋樹的第k個結點
題目描述
給定一顆二叉搜尋樹,請找出其中的第k大的結點。例如,按結點數值大小順序第三個結點的值為4。 思路:根據二叉搜尋樹的特點,中序遍歷的數值是遞增排序的,因此,只需中序遍歷二叉搜尋樹就能找到第k大結點。 如上面的二叉樹,中序遍歷結果為 {2,3,4,5,6,7,8},第三個結點的值為4
/*思路:根據二叉搜尋樹的特點,中序遍歷的數值是遞增排序的,因此,只需中序遍歷二叉搜尋樹就能找到第k大結點*/ struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) :val(x), left(NULL), right(NULL) {} }; class Solution { public: TreeNode* KthNode(TreeNode* pRoot, int k) { if (pRoot == NULL || k <= 0) return NULL; return kthnode(pRoot, k); } TreeNode* kthnode(TreeNode* pRoot, int& k) //中序遍歷查詢第k個結點 { TreeNode* target = NULL; if (pRoot->left != NULL) target = kthnode(pRoot->left, k); if (target == NULL) { if (k == 1) target = pRoot; --k; } if (pRoot->right&&target == NULL) target = kthnode(pRoot->right, k); return target; } };
相關推薦
劍指offer(C++)——二叉搜尋樹的第k個結點
題目描述 給定一顆二叉搜尋樹,請找出其中的第k大的結點。例如, 按結點數值大小順序第三個結點的值為4。 思路:根據二叉搜尋樹的特點,中序遍歷的數值是遞增排序的,因此,只需中序遍歷二叉搜
劍指offer——(24)二叉搜尋樹的後序遍歷序列
public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { if(sequence.length==0) return false; if(sequence.lengt
劍指offer——(20)二叉搜尋樹的第k個結點
最近作業好多 幾門結課作業一起來 很煩啊 中序遍歷二叉搜尋樹得到的就是升序的結點排列,遍歷的時候加個判斷是不是第k個結點就行了。 /* public class TreeNode { int val = 0; TreeNode left =
劍指offer62 尋找二叉搜尋樹第k個結點
題目 原題目是:給定一顆二叉搜尋樹,請找出其中的第k大的結點。 但是,看到網上那麼多人給出的答案後,我認為是尋找第k個結點,而不是第k大的節點。 思路 我們知道,二叉搜尋樹的特點:左子樹的節點的值均比父節點小,右子樹的節點的值均比父節點的值大。所以,我們中序遍歷二叉搜尋樹,就可以
劍指offer(57)二叉樹的下一個節點
需要 div 2種 color 節點 兩種 我們 cti 指向 題目描述 給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。註意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。 題目分析 這題一定要畫圖,因為只有畫圖我們才能分清楚下一個節
劍指offer(62)二叉搜索樹的第K個節點
它的 spa cti pan class 們的 得到 style 例如 題目描述 給定一棵二叉搜索樹,請找出其中的第k小的結點。例如, (5,3,7,2,4,6,8) 中,按結點數值大小順序第三小結點的值為4。 題目分析 首先,我們可以先畫圖。畫完圖後我們要想辦法
劍指offer——(14)二叉樹的映象(交換二叉樹)
/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.va
劍指offer——(25)二叉樹中和為某一值的路徑
參考題解: 牛客網 深度優先搜尋(DFS):此題解中,程式執行找到[10, 5, 4]後,4為葉子節點了,remove掉4,變為[10, 5],這時執行if(root.right != null) FindPath(root.right,target); 找到[10, 5,
劍指offer(20)二叉搜索樹與雙向表
定義 節點 line null set nod 轉換成 number oot 題目: 輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。 思路一:遞歸法 1.將左子樹構造成雙鏈表,並返回鏈表頭節
【劍指offer】Java實現-二叉搜尋樹的第k個結點
題目描述 給定一棵二叉搜尋樹,請找出其中的第k小的結點。例如, (5,3,7,2,4,6,8) 中,按結點數值大小順序第三小結點的值為4。 思路 二叉搜尋樹-BST(又二叉查詢樹,二叉排
【劍指offer{23-24}】二叉搜尋樹的後序遍歷序列、二叉樹中和為某一值的路徑
二叉搜尋樹的後序遍歷序列、二叉樹中和為某一值的路徑 二叉搜尋樹的後序遍歷序列 題目描述 輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的陣
劍指Offer面試題33二叉搜尋樹的後序遍歷序列java版
題目:輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的陣列的任意兩個數字都互不相同。 分析:在後序遍歷序列中,最後一個數字是樹的根節點的值。陣列中前面的數字可以分為兩部分:第一部分是左子樹節點的值,它
劍指offer--面試題27:二叉搜尋樹與雙向連結串列--Java實現
題目描述: 輸入一顆二叉搜尋樹,將二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 思路: 原先指向左子結點的指標調整為連結串列中指向前一個結點的指標,原先指向右子結點的指標指向為連結串列中指向後一個結點的指標
劍指offer面試題24 二叉搜尋樹的後序遍歷序列
解題思路: 1.判定一個序列是不是某二叉搜尋樹的後續遍歷序列,可以結合二叉樹的後續序列和二叉搜尋樹的特點來判斷。二叉樹的後續遍歷序列,其最後一個數字是樹的根節點的值,根節點的前面部分可以分為左子樹的序列和右子樹的序列。而這顆二叉樹需要是一顆二叉搜尋樹,又必須滿足左子樹上的所
劍指offer-面試題63-二叉搜尋樹的第k個結點
二叉樹節點定義: package case63_KthNodeOfBST; /** * 二叉搜尋樹的結點結構定義 * * @author WangSai * */ public class MyNode { int data; MyNode lchild;
劍指offer-題63:二叉搜尋樹的第k個結點
題目描述 給定一顆二叉搜尋樹,請找出其中的第k大的結點。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按結點數值大小順序第三個結點的值為4。 實驗平臺:牛客網 解決思路:
《劍指Offer》題目:鏈表中倒數第k個結點
倒數 -- 輸出 col ota pan code 輸入 tno 題目描述:輸入一個鏈表,輸出該鏈表中倒數第k個結點 題目分析:因為不能直接從鏈表的尾部遍歷,所以要分兩步走: 第一步:從鏈表的頭部開始遍歷,直至鏈表的尾部,統計出鏈表結點的個數 第二步:根據鏈表結點的個數,計
劍指offer編程-鏈表中倒數第k個結點
描述 節點 thead 註意 功能測試 判斷 tro return 測試用例 題目描述 輸入一個鏈表,輸出該鏈表中倒數第k個結點。 思路: 1.遍歷鏈表得到鏈表的長度l,找到從前往後的第l-k+1個節點。需要遍歷兩遍。 2.遍歷一次即可的方法:兩個指針,第一個指針從頭向尾
劍指offer十四之鏈表中倒數第k個結點
gif img https question pla last 代碼 鏈表 || 一、題目 輸入一個鏈表,輸出該鏈表中倒數第k個結點。 二、思路 兩個指針,先讓第一個指針和第二個指針都指向頭結點,然後再讓第一個指正走(k-1)步,到達第k個節點。然後兩個指針同
劍指offer刷題之連結串列中倒數第k個結點
題目描述 輸入一個連結串列,輸出該連結串列中倒數第k個結點。 # -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # s