【leetcode】第三天

二叉搜索树的最小绝对差

问题描述:给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。

  1. 了解BST

二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。

				因此利用中序遍历BST可以得到升序的二叉树节点。

2.c 递归实现BST 的遍历

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
#define MIN(a,b) ((a)<(b)?(a):(b))

int* PreOrderTraverse(struct TreeNode* root) {
  void inorder(struct TreeNode* root, int *pre, int *min) 
  {
      if (root==Null){
          return;
      }
      else{
          inorder(root->left,pre,min);//遍历左子树
      }
      if ((*pre) != -1) {
        *min = MIN(*min, root->val - (*pre));//当前节点减去上一个节点的值
    }
    (*pre)=root->val;
     inorder(root->left,pre,min);//遍历右子树
     return;

  }
  
int getMinimumDifference(struct TreeNode* root){
    int min = INT_MAX;
    int pre = -1;
    inorder(root, &pre, &min);
    return min;
}

3.Tips

  1. 把地址作为参数传给子函数,即使没有函数返回值也可以将需要的值传回主函数。
    2.二叉树的遍历用递归实现,三种遍历方式:前序,中序,后序。
发布了3 篇原创文章 · 获赞 1 · 访问量 19

猜你喜欢

转载自blog.csdn.net/qq_42803942/article/details/105074372