ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【python】Leetcode每日一题-二叉搜索树节点最小距离

2021-04-13 14:01:28  阅读:158  来源: 互联网

标签:right curr val python self 二叉 TreeNode root Leetcode


【python】Leetcode每日一题-二叉搜索树节点最小距离

【题目描述】

给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值

示例1:

bst1.jpg

输入:root = [4,2,6,1,3]
输出:1

示例2:

bst2.jpg

输入:root = [1,0,48,null,null,12,49]
输出:1

提示:

树中节点数目在范围 [2, 100] 内
0 <= Node.val <= 10^5

【分析】

  • dfs中序遍历

  • 代码

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    min_ = 100001
    pre = 100001
    def minDiffInBST(self, root: TreeNode) -> int:
        self.dfs(root)
        return self.min_
        
    def dfs(self, root):
        if root == None:
            return
        self.dfs(root.left)
        if self.pre != 100001:
            self.min_ = self.min_ if self.min_ < (root.val - self.pre) else (root.val - self.pre)
        self.pre = root.val
        self.dfs(root.right)
  • 大佬orz,真是涨知识……

    大佬题解

    1. 中序遍历保存数组,再利用搜索树已排序的特性遍历一遍数组即可(只需比较相邻元素

    2. 设置pre指针指向前驱元素,每次比较当前元素与pre元素即可,不在需要数组

    3. 使用栈和循环模拟中序优先搜索,其他流程不变,第一次看见用栈实现dfs

      /**
       * Definition for a binary tree node.
       * struct TreeNode {
       *     int val;
       *     TreeNode *left;
       *     TreeNode *right;
       *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
       * };
       */
      class Solution {
      public:
          int minDiffInBST(TreeNode* root) {
              int minval = INT_MAX;
              TreeNode* curr = root, *prev = nullptr;
              stack<TreeNode*> inorder; // 用栈实现递归
              while(curr || !inorder.empty())
              {
                  if(curr)
                  {
                      inorder.push(curr);
                      curr = curr -> left; //左
                  }
                  else
                  {
                      curr = inorder.top();
                      inorder.pop();
                      if(prev) minval = min(minval, curr -> val - prev -> val);
                      prev = curr;
                      curr = curr -> right; // 右
                  }
              }
              return minval;
          }
      };
      

标签:right,curr,val,python,self,二叉,TreeNode,root,Leetcode
来源: https://www.cnblogs.com/krnl-dpr/p/14652788.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有