LintCode 二叉树的所有路径

来源:互联网 发布:网站建设优化公司 编辑:程序博客网 时间:2024/06/06 04:20

1.描述

给一棵二叉树,找出从根节点到叶子节点的所有路径。

样例

给出下面这棵二叉树:

   1 /   \2     3 \  5

所有根到叶子的路径为:

[  "1->2->5",  "1->3"]

2.分析

首先需要找到叶子节点,从根节点到任一个叶子节点中间的路径都是一个string,当遍历到当前节点不是

叶子节点时,把当前节点加入string中,之后继续往下遍历直到到达叶子节点把这一条路径存入vector中。

3.代码

/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */
class Solution {
public:
    /**
     * @param root the root of the binary tree
     * @return all root-to-leaf paths
     */
    vector<string> v;
    void dfs(TreeNode* root,string s)
    {
        if(root->left==NULL && root->right==NULL)
        //若为叶子节点,则把当前路径s加入vecotr中
        {
            v.push_back(s);
            return ;
        }
        string t;
        if(root->left!=NULL)//若左子树不为空,把左子树的节点加入到路径t中
        {
            t=s+"->"+to_string(root->left->val);
            dfs(root->left,t);//节点移动到左子树
        }
        if(root->right!=NULL)//若右子树不为空,把右子树的节点加入到路径t中
        {
            t=s+"->"+to_string(root->right->val);
            dfs(root->right,t);
        }
    }
    vector<string> binaryTreePaths(TreeNode* root) {
        // Write your code here
        if(root==NULL)  return v;
        dfs(root,to_string(root->val));//把当前节点的值转化为string类型
        return v;
    }
};

4.总结

关于这类深度路径的题目都需要先找到叶子节点,从根节点到叶子节点的路径是通过

遍历每一个节点得到的,若当前节点不是叶子节点把他加入路径中,若是,则该条路径

遍历结束存入vector中。


0 0
原创粉丝点击