二叉搜索树的最小绝对差
问题描述:给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。
- 了解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
- 把地址作为参数传给子函数,即使没有函数返回值也可以将需要的值传回主函数。
2.二叉树的遍历用递归实现,三种遍历方式:前序,中序,后序。