lintcode——二叉树的所有路径 

    xiaoxiao2021-04-15  35

    1、题目

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

    哪家公司问你的这个题? Airbnb Alibaba Amazon Apple Baidu Bloomberg Cisco Dropbox Ebay Facebook Google Hulu Intel Linkedin Microsoft NetEase Nvidia Oracle Pinterest Snapchat Tencent Twitter Uber Xiaomi Yahoo Yelp Zenefits 感谢您的反馈  样例

    给出下面这棵二叉树:

    1 / \ 2 3 \ 5

    所有根到叶子的路径为:

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

    2、思路

        先写了一个函数,该函数是在根节点不空时,开始寻找所有路径。当左右子树全空时,返回根节点的值;当左子树不空时,递归,开始在左子树上寻找所有路径;当右子树不空时,递归,开始在右子树上寻找所有路径;

    注意:

    ①&path 传引用,相当于全局变量,在左子树找完所有路径后,右子树的路径会继续累加在path上;应该用 path,传值方式,相当于局部变量,这样在左子树找完路径后,右子树的path不包含左子树的。

    ②path+"->"+to_string(rootnode->left->val)

    int类型强制转换成string类型。

    string类型的字符如何串成一串,用相加。

    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 FindAllPath(TreeNode *rootnode,string path)  //根节点非空时找所有路径      {          if(rootnode->left==NULL && rootnode->right==NULL)                  v.push_back(path);          if(rootnode->left!=NULL)                FindAllPath(rootnode->left,path+"->"+to_string(rootnode->left->val));                 //将int型 的val转换成string,构成字符串用+          if(rootnode->right!=NULL)                FindAllPath(rootnode->right,path+"->"+to_string(rootnode->right->val));      }     vector<string> binaryTreePaths(TreeNode* root) {         // Write your code here      if(root==NULL)           return v;      else{          FindAllPath(root,to_string(root->val));          return v;         }     } };

    4、感想

       一开始不懂怎么把int类型的转换成string类型的,借鉴了网上的一些做法才写出来了。

        每条路径当到达叶子结点时结束,充分体现了传值和传引用的区别!!!!

    
    转载请注明原文地址: https://ju.6miu.com/read-671323.html

    最新回复(0)