题目
给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。
更正式地说,root.val = min(root.left.val, root.right.val) 总成立。
给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/second-minimum-node-in-a-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例
我的解法
定义一个结构体指针数组,使用二叉树的先序遍历非递归算法遍历比较。
代码实现
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int findSecondMinimumValue(struct TreeNode* root){
int min,smin,mid,top=-1;
struct TreeNode *stack[30],*p;
p = root;
min = root->val;
if(!root->left&&!root->right) smin = min;
else if(root->left->val==root->right->val) smin = min;
else if(root->left->val>root->right->val) smin = root->left->val;
else smin = root->right->val;
//二叉树的先序遍历
while(top>-1||p){
while(p){
if(smin==min&&p->val!=min) smin = p->val;
else if(p->val<smin&&p->val>min) smin = p->val;
top++;
stack[top] = p;
p = p->left;
}
if(top>-1){
p = stack[top];
top--;
p = p->right;
}
}
if(smin==min) return -1;
else return smin;;
}