671. Second Minimum Node In a Binary Tree

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 
11 static int wing=[]()
12 {
13     std::ios::sync_with_stdio(false);
14     cin.tie(NULL);
15     return 0;
16 }();
17 
18 class Solution 
19 {
20 public:
21     int mindiff=INT_MAX;
22     int findSecondMinimumValue(TreeNode* root) 
23     {
24         travelfind(root);
25         return (mindiff==INT_MAX? -1:mindiff+root->val);
26     }
27     
28     void travelfind(TreeNode* root)
29     {
30         int rnum=root->val;
31         if(root->left!=NULL)
32         {
33             if(rnum==root->left->val)
34                 travelfind(root->left);
35             else
36                 mindiff=min(mindiff,root->left->val-rnum);
37             if(rnum==root->right->val)
38                 travelfind(root->right);
39             else
40                 mindiff=min(mindiff,root->right->val-rnum);
41         }
42         else
43             return;
44     }
45 };

递归,不要慌,问题不大。子节点一定比父节点大,那么根节点为最小值,

设置一个全局差值变量

只要子节点值和根节点相等,则继续向下查找,否则计算差值,保留最小差值

这样查找,不用遍历完整棵树,只需要遍历完节点值和根节点值相等的所有节点及其子节点即可

返回值为最小差值和根节点值之和

猜你喜欢

转载自www.cnblogs.com/zhuangbijingdeboke/p/9157592.html