日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二叉搜索树的第k个结点

發布時間:2025/3/19 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二叉搜索树的第k个结点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

題目描述

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

【解決】

① 使用一個變量記錄遍歷的個數

class TreeNode {
? ? int val = 0;
? ? TreeNode left = null;
? ? TreeNode right = null;
? ? public TreeNode(int val) {
? ? ? ? this.val = val;
? ? }
}
public class Solution {
? ? int count = 0;
? ? TreeNode KthNode(TreeNode pRoot, int k) {
? ? ? ? if (pRoot == null || k <= 0){
? ? ? ? ? ? return null;
? ? ? ? }
? ? ? ? TreeNode res = null;
? ? ? ? if (pRoot.left != null){
? ? ? ? ? ? res = KthNode(pRoot.left,k);
? ? ? ? }
? ? ? ? count ++;
? ? ? ? if (res == null){
? ? ? ? ? ? if (count == k){
? ? ? ? ? ? ? ? res = pRoot;
? ? ? ? ? ? ? ? return res;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? if (res == null && pRoot.right != null){
? ? ? ? ? ? res = KthNode(pRoot.right,k);
? ? ? ? }
? ? ? ? return res;
? ? }
}

② 使用一個變量保存中序遍歷的結果

import java.util.ArrayList;
import java.util.List;

class TreeNode {
? ? int val = 0;
? ? TreeNode left = null;
? ? TreeNode right = null;
? ? public TreeNode(int val) {
? ? ? ? this.val = val;
? ? }
}
public class Solution {
? ? List<TreeNode> list = new ArrayList<>();
? ? TreeNode KthNode(TreeNode pRoot, int k) {
? ? ? ? if (k == 0) return null;
? ? ? ? inorder(pRoot);
? ? ? ? if (k > list.size()) return null;
? ? ? ? return list.get(k - 1);
? ? }
? ? public void inorder(TreeNode root){
? ? ? ? if (root == null) return;
? ? ? ? inorder(root.left);
? ? ? ? list.add(root);
? ? ? ? inorder(root.right);
? ? }
}

轉載于:https://my.oschina.net/liyurong/blog/1678807

總結

以上是生活随笔為你收集整理的二叉搜索树的第k个结点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。