當前位置:
首頁 >
[LC]783题 二叉搜索树结点最小距离(中序遍历)
發布時間:2024/10/8
49
如意码农
生活随笔
收集整理的這篇文章主要介紹了
[LC]783题 二叉搜索树结点最小距离(中序遍历)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
①題目
給定一個二叉搜索樹的根結點 root, 返回樹中任意兩節點的差的最小值。
示例:
輸入: root = [4,2,6,1,3,null,null]
輸出: 1
解釋:
注意,root是樹結點對象(TreeNode object),而不是數組。
給定的樹 [4,2,6,1,3,null,null] 可表示為下圖:
4
/ \
2 6
/ \
1 3
最小的差值是 1, 它是節點1和節點2的差值, 也是節點3和節點2的差值。
注意:
二叉樹的大小范圍在 2 到 100。
二叉樹總是有效的,每個節點的值都是整數,且不重復。
②思路
這個題跟530題很像,所以,只是在530題的基礎上,把計算res的那一行代碼中的絕對值函數去掉即可。
③代碼
//第530題是返回任意兩節點的差的絕對值的最小值,這個題是沒有絕對值要求
class Solution {
TreeNode pre;
int res=Integer.MAX_VALUE; //res在17行的helper函數里計算完畢,在18行里返回。
public int minDiffInBST(TreeNode root) {
if(root==null) return 0;
helper(root);
return res;
} private void helper(TreeNode root){
if(root==null) return; // 直接返回,也就是退出遞歸中的此輪helper函數。
helper(root.left); //因為是中序遍歷,所以,此處直接抵達BST的左下角
if(pre!=null)
res=Math.min(res,root.val-pre.val);
pre=root;
helper(root.right); }
}
//本題跟530題太像了。
④學到的東西
530題與本題783,最核心的地方在于第12到17行,
1、第12行,僅僅一個return,就跳出了本輪遞歸。
2、因為是中序遍歷,所以先處理.left。如13行。
3、第16行,就是root傳遞給pre的時機。
總結
以上是生活随笔為你收集整理的[LC]783题 二叉搜索树结点最小距离(中序遍历)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Opencv-python 3.3版本安
- 下一篇: 【腾讯面试题】Docker