zoukankan      html  css  js  c++  java
  • 剑指offer-面试题34-二叉树中和为某一值的路径-二叉树遍历

    /*
    题目:
    	输入一颗二叉树和一个整数,打印从根节点到叶子节点中所有和为该整数的路径。
    */
    /*
    思路:
    	先序遍历,深度遍历。
    	从树根开始,记录路径之和,遍历到叶子节点,如果和为期望值,则输出。
    	回退节点,寻找下一个叶子节点,直到遍历完所有到达叶子节点的路径。
    */
    #include<iostream>
    #include<string.h>
    #include<algorithm>
    #include<cmath>
    #include<stdio.h>
    #include<vector>
    #include<stack>
    #include<queue>
    
    using namespace std;
    
    struct TreeNode {
    	int val;
    	struct TreeNode *left;
    	struct TreeNode *right;
    	TreeNode(int x) :
    			val(x), left(NULL), right(NULL) {
    	}
    };
    vector<vector<int>> res;
    vector<int> path;
    
    void FindPathCore(TreeNode* root,int expectNumber,int currentNumber){
        path.push_back(root->val);
        currentNumber += root->val;
        bool isLeaf = (root->left == nullptr && root->right == nullptr) ? true: false;
    
        if(currentNumber == expectNumber && isLeaf){
            res.push_back(path);
        }
        if(root->left != nullptr){
            FindPathCore(root->left,expectNumber,currentNumber);
        }
        if(root->right != nullptr){
            FindPathCore(root->right,expectNumber,currentNumber);
        }
        path.pop_back();
    }
    vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
    
        if(root == nullptr) return res;
        vector<int> path;
        int currentNumber = 0;
        FindPathCore(root, expectNumber, currentNumber);
        return res;
    }
    

       

  • 相关阅读:
    boost常用记录
    redis系列-redis的持久化
    分布式存储的一些概念
    搜索引擎学习-实现
    搜索引擎学习-概述
    设计模式-创建型模式(读书笔记)
    redis系列-redis的使用场景
    分布式系统设计准则
    2018/12/06 eclipse 快速加载需要的包
    2018/12/06 L1-028 判断素数 Java
  • 原文地址:https://www.cnblogs.com/buaaZhhx/p/11953711.html
Copyright © 2011-2022 走看看