码迷,mamicode.com
首页 > 其他好文 > 详细

112. Path Sum

时间:2018-05-18 14:04:06      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:std   pre   序列   init   als   pop   span   style   struct   

 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 static int wing=[]()
11 {
12     std::ios::sync_with_stdio(false);
13     cin.tie(NULL);
14     return 0;
15 }();
16 
17 
18 class Solution 
19 {
20 public:
21     bool hasPathSum(TreeNode* root, int sum) 
22     {
23         if(root==NULL)
24             return false;
25         stack<TreeNode *> s;
26         int cur=0;
27         TreeNode *p=root,*r=NULL;
28         while(p||!s.empty())
29         {
30             if(p)
31             {
32                 s.push(p);
33                 cur+=p->val;
34                 p=p->left;
35             }
36             else
37             {
38                 p=s.top();
39                 if(p->right&&p->right!=r)
40                 {
41                     p=p->right;
42                     s.push(p);
43                     cur+=p->val;
44                     p=p->left;
45                 }
46                 else
47                 {
48                     if(p->left==NULL&&p->right==NULL&&cur==sum)
49                         return true;
50                     cur-=p->val;
51                     r=p;
52                     s.pop();
53                     p=NULL;
54                 }
55             }
56         }
57         return false;
58     }
59 };

利用后序遍历的特性,后序遍历时,栈中存储的序列为从根节点到栈顶节点的一条路径。

首先判定这条路径是否到达叶节点,通过判定栈顶节点的子节点是否为空来达到目的

然后判定栈中当前和是否为给定值,若为给定值,则直接返回

用的非递归后序遍历

112. Path Sum

标签:std   pre   序列   init   als   pop   span   style   struct   

原文地址:https://www.cnblogs.com/zhuangbijingdeboke/p/9055167.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!