我试图用kotlin中的递归来回答leetcode上二叉树中最长的曲折路径。输入如下所示
[1,null,1,1,1,null,null,1,1,null,1,null,null,null,1,null,1]
并表示二叉树。我遇到的问题与递归有关,我当前的代码在访问树中的所有节点后返回 1。但我打算让代码在每个树节点命中后添加 1 并将其添加到该锯齿形总数中。
left += traverseDirection(root?.left, "left")
right += traverseDirection(root?.right, "right")
左和右仅表示每个路径侧的相应之字形。我想知道的是,如何在每次递归调用后以println语句的方式添加这些值
/**
* Example:
* var ti = TreeNode(5)
* var v = ti.`val`
* Definition for a binary tree node.
* class TreeNode(var `val`: Int) {
* var left: TreeNode? = null
* var right: TreeNode? = null
* }
*/
class Solution {
fun longestZigZag(root: TreeNode?): Int {
var left: Int = 0
var right: Int = 0
left += traverseDirection(root?.left, "left")
right += traverseDirection(root?.right, "right")
return maxOf(left, right)
}
fun traverseDirection(root: TreeNode?, direction: String): Int {
if (direction == "left" && root?.left == null){
return 0
}
if (direction == "right" && root?.right == null){
return 0
}
var current = root
if (direction == "left"){
current = root?.left
traverseDirection(current, "right")
println("add 1")
return 1
}
if (direction == "right"){
current = root?.right
traverseDirection(current, "left")
println("add 1")
return 1
}
return 0
}
}
我无法轻松运行您的代码来验证这一点,但我相信您需要替换它:
traverseDirection(current, "right")
return 1
有了这个:
return traverseDirection(current, "right") + 1
“左”倾路线也是如此。
此外,我认为只有从根部开始,你的解决方案才能找到最长的之字形。您必须为树中的每个节点运行longestZigZag()
并找到最大值。这将为您提供一个O(n²)复杂度的简单解决方案。
如何在二叉树中找到最小路径和,并打印路径?路径可以从ROOT节点到任何LEAF节点。我已经编写了C代码来查找最小和,但是在打印路径时遇到了问题。 参数列表中的未使用,有人能帮我打印路径和最小的路径吗?
我很难找到使用递归函数查找搜索二叉树的最长路径的代码。 bst_node是搜索二叉树的节点。 退出递归的条件非常简单: 在进行递归之前,打印节点的值: 如果假设深度x处的节点只有一个左子节点,那么最长路径穿过节点的左子节点,通过使用递归,我们可以这样写: 如果深度x处的节点只有右子节点,则最长路径穿过节点的右子节点,通过使用递归,我们可以像这样编写它 但是,如果节点同时具有左子项和右子项怎么办?我
这道题是 LeetCode 124 题。 给定一个非空二叉树,返回其最大路径和。注意,这里的“路径”并非自顶向下的单向路径,而是二叉树中任意连通的路径,可以在任一节点开始和结束。比如对于下图的二叉树,10->12->9 是一个最大路径: -9 / \ 1 12 / \ 10 9 分析 首先定义“端点”的概念。一条路径有两个端点:起点和终点。比如上述示例中,
本文向大家介绍二叉树任意两个节点之间路径的最大长度?相关面试题,主要包含被问及二叉树任意两个节点之间路径的最大长度?时的应答技巧和注意事项,需要的朋友参考一下 考察点:树
试图计算二叉树中从根到叶的路径和。似乎不起作用,doesIt的值变为true,但由于它是递归的,所以当堆栈弹出时,它会切换回false。我不知道怎么修。如何更改代码,使doesIt的值更改为true后,它会一直向上传播? 考虑树:[5,4,8,11, null, null, null,7,2]无序 5有两个孩子4和8,4有一个孩子11,8没有孩子 hasPathSum(根,22)
我将完整子树定义为所有级别都已满且最后一个级别左对齐的树,即所有节点都尽可能左对齐,我希望找到树中最大的完整子树。 一种方法是对每个节点作为根执行这里概述的方法,这将花费O(n^2)时间。 有更好的方法吗?