标签: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 };
利用后序遍历的特性,后序遍历时,栈中存储的序列为从根节点到栈顶节点的一条路径。
首先判定这条路径是否到达叶节点,通过判定栈顶节点的子节点是否为空来达到目的
然后判定栈中当前和是否为给定值,若为给定值,则直接返回
用的非递归后序遍历
标签:std pre 序列 init als pop span style struct
原文地址:https://www.cnblogs.com/zhuangbijingdeboke/p/9055167.html