[LC]783题 二叉搜索树结点最小距离(中序遍历)
①題目
給定一個(gè)二叉搜索樹的根結(jié)點(diǎn) root, 返回樹中任意兩節(jié)點(diǎn)的差的最小值。
示例:
輸入: root = [4,2,6,1,3,null,null]
輸出: 1
解釋:
注意,root是樹結(jié)點(diǎn)對象(TreeNode object),而不是數(shù)組。
給定的樹 [4,2,6,1,3,null,null] 可表示為下圖:
4
/ \
2 6
/ \
1 3
最小的差值是 1, 它是節(jié)點(diǎn)1和節(jié)點(diǎn)2的差值, 也是節(jié)點(diǎn)3和節(jié)點(diǎn)2的差值。
注意:
二叉樹的大小范圍在 2 到 100。
二叉樹總是有效的,每個(gè)節(jié)點(diǎn)的值都是整數(shù),且不重復(fù)。
②思路
這個(gè)題跟530題很像,所以,只是在530題的基礎(chǔ)上,把計(jì)算res的那一行代碼中的絕對值函數(shù)去掉即可。
③代碼
//第530題是返回任意兩節(jié)點(diǎn)的差的絕對值的最小值,這個(gè)題是沒有絕對值要求
class Solution {
TreeNode pre;
int res=Integer.MAX_VALUE; //res在17行的helper函數(shù)里計(jì)算完畢,在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函數(shù)。
helper(root.left); //因?yàn)槭侵行虮闅v,所以,此處直接抵達(dá)BST的左下角
if(pre!=null)
res=Math.min(res,root.val-pre.val);
pre=root;
helper(root.right); }
}
//本題跟530題太像了。
④學(xué)到的東西
530題與本題783,最核心的地方在于第12到17行,
1、第12行,僅僅一個(gè)return,就跳出了本輪遞歸。
2、因?yàn)槭侵行虮闅v,所以先處理.left。如13行。
3、第16行,就是root傳遞給pre的時(shí)機(jī)。
總結(jié)
以上是生活随笔為你收集整理的[LC]783题 二叉搜索树结点最小距离(中序遍历)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Opencv-python 3.3版本安
- 下一篇: 【腾讯面试题】Docker