标签:
二叉树中是否存在一条路径(从根节点到叶节点)的和等于给定值。
【思路】
1.想到用栈深度遍历,不会实现。
2.递归,每个节点自身的值,加上左子树或右子树等于给定值吗?
【other code】
bool PathSum(TreeNode *root,int sum,int val) { if(root==NULL) return false; val+=root->val; if(root->left==NULL && root->right==NULL) { if(sum==val) return true; return false; } return PathSum(root->left,sum,val) || PathSum(root->right,sum,val); } bool hasPathSum(TreeNode *root, int sum) { return PathSum(root,sum,0); }
【评价】
递归好像是万能的!能把问题变得这么简单。
把根节点当做只有一个左节点和一个右节点,在最简单情况下执行算法,然后再递归左和右子树。
return PathSum(root->left,sum,val) || PathSum(root->right,sum,val);这句话是核心。
左子树不行,就右子树。
标签:
原文地址:http://www.cnblogs.com/ketchups-notes/p/4452650.html