问题陈述
我无法理解我的代码出了什么问题,也很难理解下面的约束。
我的伪代码:
parentNode
限制条件:
二叉树中的节点数在[1,10^5]范围内。
- 每个节点的值在[-10^4,10^4]之间
首先:我对约束的困惑是,自动测试会给出输入,如<code>2,4,4,null,1,3,null,null,5,null,null,null,null,5,4,4〕
其次:对于上面的输入,我的代码输出8,期望值是6,但是当我从数组中绘制树时,我也认为答案应该是8!
输入树
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def goodNodes(self, root: TreeNode) -> int:
arrRepresentation = []
queue = []
queue.append(root)
# while queue not empty
while queue:
# remove node
node = queue.pop(0)
if node is None:
arrRepresentation.append(None)
else:
arrRepresentation.append(node.val)
if node is not None:
# add left to queue
queue.append(node.left)
# add right to queue
queue.append(node.right)
print(arrRepresentation)
goodNodeCounter = 1
# iterate over array representation of binary tree
for k in range(len(arrRepresentation)-1, 0, -1):
child = arrRepresentation[k]
if child is None:
continue
isGoodNode = self._isGoodNode(k, arrRepresentation)
print('is good: ' + str(isGoodNode))
if isGoodNode:
goodNodeCounter += 1
return goodNodeCounter
def _isGoodNode(self, k, arrRepresentation):
child = arrRepresentation[k]
print('child: '+str(child))
# calculate index of parent
parentIndex = (k-1)//2
isGood = True
# if we have not reached root node
while parentIndex >= 0:
parent = arrRepresentation[parentIndex]
print('parent: '+ str(parent))
# calculate index of parent
parentIndex = (parentIndex-1)//2
if parent is None:
continue
if parent > child:
isGood = False
break
return isGood
您提供的二进制堆对应于后续层次结构:
tree = [2,4,4,4,None,1,3,None,None,5,None,None,None,None,5,4,4]
printHeapTree(tree)
2
/ \
4 4
/ / \
4 1 3
\
5
在该树中,只有项值<code>1
请注意,列表中有一些值是不可访问的,因为它们的父级为null(无),因此它们不是树的一部分(但这可能是复制/粘贴错误)。如果我们用其他东西替换这些无值以使它们成为树的一部分,我们可以看到不可访问节点在层次结构中的位置:
t = [2,4,4,4,'*', 1,3,'*',None, 5,None, None,None,None,5,4,4]
printHeapTree(t)
2
__/ \_
4 4
/ \ / \
4 * 1 3
/ / \
* 5 5
/ \
4 4
这可能是结果8(不将根视为好)与结果6(将根视为好)之间的差异的来源。
您可以在此处找到printHeapTree()函数。
既然你想用广度优先搜索来解决:
from collections import deque
class Solution:
def goodNodes(self,root:TreeNode)->int:
if not root:
return 0
queue=deque()
# run bfs with track of max_val till its parent node
queue.append((root,-inf))
res=0
while queue:
current,max_val=queue.popleft()
if current.val>=max_val:
res+=1
if current.left:
queue.append((current.left,max(max_val,current.val)))
if current.right:
queue.append((current.right,max(max_val,current.val)))
return res
我将节点及其max_value添加到它的父节点。我不能添加全局max_value,因为看看这棵树:
对于前3个节点,您将拥有这个[3,1,4]
,如果您在全局范围内保持max_val,max_val
将是4。
下一个节点是3,左边的叶子节点。因为max_node是4,3
递归可能更容易:
class Node:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def good_nodes(root, maximum=float('-inf')):
if not root: # null-root
return 0
is_this_good = maximum <= root.val # is this root a good node?
maximum = max(maximum, root.val) # update max
good_from_left = good_nodes(root.left, maximum) if root.left else 0
good_from_right = good_nodes(root.right, maximum) if root.right else 0
return is_this_good + good_from_left + good_from_right
tree = Node(2, Node(4, Node(4)), Node(4, Node(1, Node(5, None, Node(5, Node(4), Node(4)))), Node(3)))
print(good_nodes(tree)) # 6
基本上,递归遍历树,同时更新到目前为止看到的最大数量。在每次迭代中,将根的值与最大值进行比较,并在必要时递增计数器。
计算节点 需要额外启用 l3_agent(dvr 模式),以及 metadata agent。 其实,跟传统情况下的网络节点十分类似。每个东西向路由器有自己的命名空间,负责跨子网的转发。另外,多一个 floating 路由器,专门负责经由 floating 地址的南北向转发。 东西流量 如上图所示,租户两个子网,红色和绿色,分别有 vm1 和 vm2,位于节点 cn1 和 cn2 上。 vm1 访
计算节点 主要包括两个网桥:集成网桥 br-int 和 隧道网桥 br-tun。 $ sudo ovs-vsctl show225f3eb5-6059-4063-99c3-8666915c9c55 Bridge br-int fail_mode: secure Port br-int Interface br-int
计算节点 查看网桥信息,主要包括两个网桥:br-int和br-eth1: [root@Compute ~]# ovs-vsctl showf758a8b8-2fd0-4a47-ab2d-c49d48304f82 Bridge "br-eth1" Port "phy-br-eth1" Interface "phy-br-eth1" Port "
计算节点 以抽象系统架构的图表为例,Compute 节点上包括两台虚拟机 VM1 和 VM2,分别经过一个网桥(如 qbr-XXX)连接到 br-int 网桥上。br-int 网桥再经过 br-tun 网桥(物理网络是 GRE 实现)连接到物理主机外部网络。 对于物理网络通过 vlan 来隔离的情况,则一般会存在一个 br-eth 网桥,替代 br-tun 网桥。 qbr 在 VM1 中,虚拟机的
假设我有一个无向多图,即一个(G,E)对,其中G是一个有限的结点集,E是一个有限的边集。我正在寻找一个算法,将分配一个单一的字符串值到每个节点在以下的约束。 1. 每个节点都被赋予一组约束(可能是空的),这些约束限制了允许的值。我希望至少支持以下类型的值约束: null 有两种类型的边缘: 不同, 相同, 这意味着应该为相关节点分配不同/相同的值(意味着不相等/相等的字符串)。 null 这意味着
假设我们有这样一棵树:http://up400.siz.co.il/up1/tymmh2wylmmo.png 当树的高度为H时,树中的每个级别可以有不同数量的节点。例如,根级别有3个节点(“图片中的x”),下一级别每个节点有2个节点(“图片中的y”),下一级别每个节点有4个节点(“图片中的z”),等等。。。 在给定H和节点数(每个节点)的情况下,有没有计算这类树的公式? 谢谢