• 二叉树中和为某一值的路径


      题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

      树结构的定义如下:

    1 struct TreeNode {
    2     int val;
    3     struct TreeNode *left;
    4     struct TreeNode *right;
    5     TreeNode(int x) :
    6             val(x), left(NULL), right(NULL) {
    7     }
    8 };

      解析:由于路径是从根节点出发到叶节点,也就是说路径总是以根节点为起始点,因此我们需要遍历根节点。在二叉树的前序、中序、后序遍历中,只有前序遍历是首先访问根节点的。本题的算法中主要有以下几步:

      1、前序遍历访问到某个节点时,将该节点添加到路径上,并累加该节点的值;

      2、如果该节点为叶节点,并且路径中的节点值的和刚好等于输出的整数,则当前路径符合要求;

      3、如果当前节点不是叶节点,则继续访问它的子节点;

      4、递归结束之后,将自动回到它的父节点,因此要在退出之前在路径中删除掉当前节点。

      根据这几点,便可以前序遍历为基础写出改代码:

     1 vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
     2     vector<vector<int>> findPath;
     3     vector<int> path;
     4     int currentSum = 0;
     5     if(root == NULL)
     6         return findPath;
     7     FindPath(root,expectNumber,path,findPath,currentSum);
     8     return findPath;
     9 }
    10 
    11 void FindPath(TreeNode* root,int expectNumber,vector<int>& path,vector<vector<int>>& findPath,int currentSum){
    12     //前序遍历访问到某个节点时,将该节点添加到路径上,并累加该节点的值;
    13     currentSum+=root->val;
    14     path.push_back(root->val);
    15     bool isLeaf = root->left==NULL && root->right==NULL;
    16     //如果该节点为叶节点,并且路径中的节点值的和刚好等于输出的整数,则当前路径符合要求;
    17     if(isLeaf && currentSum == expectNumber){
    18         findPath.push_back(path);
    19     }
    20     //如果当前节点不是叶节点,则继续访问它的子节点;
    21     if(root->left!=NULL)
    22         FindPath(root->left,expectNumber,path,findPath,currentSum);
    23     if(root->right!=NULL)
    24         FindPath(root->right,expectNumber,path,findPath,currentSum);
    25     //递归结束之后,将自动回到它的父节点,因此要在退出之前在路径中删除掉当前节点。
    26     path.pop_back();
    27 }
  • 相关阅读:
    CSS之表格边框合并、兄弟标签外边距合并、父子标签的外边距合并
    html之css选择器学习
    html5常见新增标签
    mysql之数据备份与恢复
    mysql之用户权限管理
    mysql之用户管理
    mysql之全球化和本地化:字符集、校对集、中文编码问题
    Sublime Text 3 安装与配置
    CSS 自适应
    php 验证码代码
  • 原文地址:https://www.cnblogs.com/yangrenzhi/p/5801700.html
Copyright © 2020-2023  润新知