zoukankan      html  css  js  c++  java
  • 剑指offer 25:二叉树中和为某一值的路径

    题目描述

    输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
     

    解题思路

    基本路线仍未进行二叉树遍历,只不过在路过一个节点时需要对该节点走过的路径长度进行统计。

    C++代码实现:

    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };*/
    class Solution {
    public:
        vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
            vector<vector<int> > result; 
            if (root==NULL){
                  return result;
              }
            int alreadyNum=0;
            vector<int> path;
            findsubway(result,path,root,expectNumber,alreadyNum);
            return result;
        }
        void findsubway(vector<vector<int> >& result,vector<int>& path,TreeNode* root,int expectNumber,int& alreadyNum){
            alreadyNum+=root->val;
            path.push_back(root->val);
            //判断是否是叶子节点
            bool isLeaf=(root->left==NULL)&& (root->right==NULL);
            if(isLeaf){
                if(alreadyNum==expectNumber){
                    vector<int> tmp(path);
                    //是满足要求的路径,存入
                    result.push_back(tmp);
                }
            }else{
                //如果遇见当前节点路径已经比期望值要大,则跳过此子树
                if(alreadyNum<expectNumber){
                    if(root->left!=NULL){
                        findsubway(result,path,root->left,expectNumber,alreadyNum);    
                    }
                    if(root->right!=NULL){
                        findsubway(result,path,root->right,expectNumber,alreadyNum);    
                    }   
                }
            }
            alreadyNum-=root->val;
            path.pop_back();
        }
    };
  • 相关阅读:
    Runloop运行循环的理解
    GCD dispatch_apply基本使用
    GCD信号量semaphore控制线程并发数
    多线程GCD dispatch_once_t/dispatch_barrier_<a>sync/dispatch_group_t
    iOS开发常用宏定义
    OC方法可变参数
    GCD的基本使用
    iOS实用小工具
    项目中实用第三方框架
    NSTimer内存泄漏问题
  • 原文地址:https://www.cnblogs.com/fancy-li/p/11625606.html
Copyright © 2011-2022 走看看