本文主要是介绍(力扣)671.二叉树中第二小的节点(c语言),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 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;;}
这篇关于(力扣)671.二叉树中第二小的节点(c语言)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!