Binary Tree Paths(二叉树的路径)

来源:互联网 发布:自己动手写网络爬虫 编辑:程序博客网 时间:2024/05/18 01:55

Given a binary tree, return all root-to-leaf paths.(给定一棵二叉树,返回所有根节点到叶子节点的路径)

For example, given the following binary tree:

   1 /   \2     3 \  5

All root-to-leaf paths are:
[“1->2->5”, “1->3”]

1.个人分析
采用先序遍历对二叉树进行遍历,在遍历的同时将经过的节点保存到结果集中去。

2.个人解法

void findPath(TreeNode *root, vector<string> &res, string path){    if(!root) return;    if(root->left == NULL && root->right == NULL){        if(path.empty()){            string str = to_string((long long)root->val);            path.append(str);        }        else {            string pointer = "->";            path.append(pointer);                           string str = to_string((long long)root->val);            path.append(str);        }        res.push_back(path);    }    if(path.empty()){        string str = to_string((long long)root->val);        path.append(str);    }    else {        string pointer = "->";        path.append(pointer);                       string str = to_string((long long)root->val);        path.append(str);    }    findPath(root->left, res, path);    findPath(root->right, res, path);}vector<string> binaryTreePaths(TreeNode* root) {    vector<string> res;    string path;    findPath(root, res, path);    return res;}

3.参考解法

void dfs(TreeNode* root, vector<string> &result,string branch){   if (!root->left && !root->right){       result.push_back(branch);   }   if (root->left) dfs(root->left, result, branch + "->" + to_string(root->left->val));   if (root->right) dfs(root->right, result, branch + "->" + to_string(root->right->val));}  vector<string> binaryTreePaths(TreeNode* root)   {      vector<string> result;      if (!root) return result;      dfs(root, result, to_string(root->val));      return result;  }

4.总结
参考解法采用的是DFS,也就是后序遍历的方式进行路径查找,相比先序遍历代码更加简洁。

PS:

  • 题目的中文翻译是本人所作,如有偏差敬请指正。
  • 其中的“个人分析”和“个人解法”均是本人最初的想法和做法,不一定是对的,只是作为一个对照和记录。
0 0