其他分享
首页 > 其他分享> > 剑指offer-面试题34-二叉树中和为某一值的路径-二叉树遍历

剑指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;
}

   

标签:面试题,TreeNode,offer,int,expectNumber,二叉树,include,root,currentNumber
来源: https://www.cnblogs.com/buaaZhhx/p/11953711.html