内容简介:第8天,感觉快要把每天刷题的习惯找回来了。。。今天的题目是这道题可以分为几个部分来解决:
第8天,感觉快要把每天刷题的习惯找回来了。。。
今天的题目是 All Nodes Distance K in Binary Tree
这道题可以分为几个部分来解决:
target target
虽说是三部分,但是在实现“寻找target节点”的时候,我们需要考虑到如何向前寻找,我们先把“向下寻找距离当前节点K步的节点”实现了。
很容易发现,这是一个递归的过程,做遍历的时候维护好K值即可,然后加一些判断条件就能实现了。
如果忽略掉“从target节点向前寻找”这个要求,我们要怎么实现寻找target节点呢?
也是一个很简单的问题,就直接用递归形式的先序遍历即可,遍历时判断当前节点是否为target节点。
现在就剩下最后一部分了,也是这道题的难点所在。
要实现向前移动,我们可以利用“寻找target节点”的一些信息,通过一个返回值来确定,是否在某个子分支中找到 target 节点:
如果找到了,我们就可以从当前节点开始向另一个分支寻找了,因为需要计算到target节点的距离,所以我们干脆把返回值设置为还需要走多少步才能到达”距离target节点K步“的位置,故:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<int> distanceK(TreeNode* root, TreeNode* target, int K) { vector<int> res; if (root == nullptr || target == nullptr) return res; downSearch(res, target, K); findTarget(res, root, target, K); return res; } int findTarget(vector<int> &res, TreeNode *root, TreeNode *target, int K) { if (root == nullptr) return -1; if (root == target) return K - 1; // left int left_k = findTarget(res, root->left, target, K); if (left_k == 0) { res.push_back(root->val); return left_k - 1; } else if (left_k > 0) { downSearch(res, root->right, left_k-1); return left_k - 1; } int right_k = findTarget(res, root->right, target, K); if (right_k == 0) { res.push_back(root->val); return right_k - 1; } else if (right_k > 0) { downSearch(res, root->left, right_k-1); return right_k - 1; } return -1; } void downSearch(vector<int> &res, TreeNode* p, int K) { if (p == nullptr || K < 0) return ; if (K == 0) { res.push_back(p->val); return; } downSearch(res, p->left, K-1); downSearch(res, p->right, K-1); } };
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深入理解程序设计
[美] Jonathan Bartlett / 郭晴霞 / 人民邮电出版社 / 2014-1 / 49.00
是否真正理解汇编语言,常常是普通程序员和优秀程序员的分水岭。《深入理解程序设计:使用Linux汇编语言》介绍了Linux平台下的汇编语言编程,教你从计算机的角度看问题,从而了解汇编语言及计算机的工作方式,为成就自己的优秀程序员之梦夯实基础。 很多人都认为汇编语言晦涩难懂,但New Medio技术总监Jonathan Bartlett的这本书将改变人们的看法。本书首先介绍计算机的体系结构,然后......一起来看看 《深入理解程序设计》 这本书的介绍吧!