OJ练习27——T112 Path Sum

二叉树中是否存在一条路径(从根节点到叶节点)的和等于给定值。

【思路】

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);这句话是核心。

左子树不行,就右子树。

posted on 2015-04-24 10:16  EmmaLi  阅读(100)  评论(0编辑  收藏  举报

导航