算法-二叉树:二叉搜索树的最小绝对差
给出一颗所有节点为非负值的二叉搜索树,请计算树中任意两个节点的差的绝对值的最小值。
方法一:中序遍历后转为有序数组,然后遍历一遍数组去求最小绝对差。在此不做过多说明。
方法二:中序遍历递归,依旧定义一个pre指向前一个节点。
TreeNode* pre = NULL;
int result = INT_MAX;
void traversal(TreeNode* root){
if(root == NULL) return ;
traversal(root->left);//左
if(pre!=NULL){ //中
result = min(result,root->val - pre->val);
}
pre = root;
traversal(root->right);//右
}
方法三:迭代,依旧是在中序迭代法上做一些改动。
int isBST(TreeNode* root){
stack<TreeNode*> st;
TreeNode* pre = NULL;
TreeNode* cur = root;
int result = INT_MAX;
while (!st.empty() || cur!=NULL) {
if(cur!=NULL){ //左
st.push(cur);
cur = cur->left;
}
else{
cur = st.top(); //中
st.pop();
if(pre!=NULL) { //改动
result = min(result,cur->val - pre->val);
}
pre = cur;
cur = cur->right;//右
}
}
return result;
}