在二叉树中找到累加和为指定值的最长路径长度
来源:互联网 发布:堆量选股公式 源码 编辑:程序博客网 时间:2024/06/05 06:45
给定二叉树头结点和sum,打印等于sum的最长路径长度
输入:
{-3,3,-9,1,0,2,1,0,0,1,6,0,0}
6
输出:
4
//// main.cpp// 在二叉树中找到累加和为指定值的最长路径长度//// Created by zjl on 16/9/14.// Copyright © 2016年 zjl. All rights reserved.// 一条符合指定值的路径可以从任何节点开始,同时也可以跳过某些路径上的节点#include <iostream>#include <vector>#include <queue>#include <map>using namespace std;struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode(int x):val(x),left(NULL),right(NULL){}};//初始化是层次遍历的初始化过程TreeNode* create(vector<int>vec){ int num = vec.size(); TreeNode* root = new TreeNode(vec[0]); queue<TreeNode*> q; q.push(root); int i = 1; while(i <= num){ TreeNode* t = q.front(); q.pop(); if(vec[i] > 0){ t->left = new TreeNode(vec[i]); q.push(t->left); } else t->left = NULL; i++; if(i<= num){ if(vec[i] > 0){ t->right = new TreeNode(vec[i]); q.push(t->right); } else t->right = NULL; i++; } } return root;}int preorder(TreeNode* root, int sum, int presum, int level, int maxlen, map<int, int>&mp){ if(root == NULL) return maxlen; int cursum = presum + root->val; if(mp.find(cursum) == mp.end()) mp[cursum] = level; if(mp.find(cursum - sum) != mp.end()) maxlen = max(maxlen, level - mp[cursum-sum]); maxlen = preorder(root->left, sum, cursum, level+1, maxlen, mp); maxlen = preorder(root->right, sum, cursum, level+1, maxlen, mp); if(level == mp[cursum]) mp.erase(cursum); return maxlen;}int solve(TreeNode* root, int sum){ map<int, int>mp; mp[0] = 0; //记录目前的路径总和,对应的层数 return preorder(root, sum, 0, 1, 0, mp);}int main(int argc, const char * argv[]) { // insert code here... vector<int>num={-3,3,-9,1,0,2,1,0,0,1,6,0,0};//这里,0->NULL TreeNode* root = create(num); int sum = 6; //指定值 int res = solve(root, sum); cout<< res<<endl; return 0;}
0 0
- 在二叉树中找到累加和为指定值的最长路径长度
- 在二叉树中找到累加和为指定值的最长路径长度
- 在二叉树中找到累加和为指定值的最长路径长度
- 二叉树问题---在二叉树中找到累加和为指定值的最长路径长度
- 二叉树系列---找到累加和为指定值的最长路径长度
- 数组与矩阵---未排序正数数组中累加和为指定值的最长子数组长度
- 未排序正数数组中累加和为给定值的最长子数组长度
- 求:未排序数组中累加和为给定值的最长子数组长度
- 未排序正数数组中累加和为给定值的最长子数组长度
- 数组中累加和为定值K的最长子数组长度
- 未排序正整数数组中累加和为给定值的最长子数组长度
- 在未排序数组中找到和为k的最长子数组长度
- 数组中累加和为k的最长子数组长度(算法)
- 找出二叉树中所有累加值为给定值的路径
- 求二叉树中结点值的和为指定整数的所有路径
- 未排序数组中累加和小于给定值的最长子数组长度
- 未排序数组中累加和小于或等于给定值的最长子数组长度
- 二元查找树-- 在二元树中找到和为某一值的所有路径
- 【leetcode】120. Triangle
- 京东量化平台初始化设置
- GIT及其部分指令介绍(下)
- 京东量化平台条件选股
- 376. Wiggle Subsequence
- 在二叉树中找到累加和为指定值的最长路径长度
- 135. Candy[hard]
- 出现RPC服务器不可用的解决方法
- 14章上机练习2
- nginx日志详解和日志切割
- Java记事本
- Canvas和paint的使用
- 动态加载view的LayoutParams参数设置
- 如何让 H5 体验接近 APP:(一)触摸反馈