root is not a leaf queue是什么错误
时间: 2023-05-30 11:02:05 浏览: 656
"root is not a leaf queue" 是 Hadoop YARN(Yet Another Resource Negotiator)错误消息的一种,它表示在尝试使用非叶子队列时发生了错误。在 YARN 中,队列被组织成层次结构,并且有些队列被认为是叶子队列,而有些队列则被认为是非叶子队列。当尝试将应用程序提交到非叶子队列时,就会出现此错误,因为非叶子队列不能接受应用程序的提交。要解决此问题,您需要将应用程序提交到合适的叶子队列。
相关问题
用队列实现二叉树的层次遍历算法,并按层次输出(标出层号),并能统计树叶数,结点数,层高等信息。
以下是使用队列实现二叉树的层次遍历算法并输出相关信息的代码(Python实现):
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
class BinaryTree:
def __init__(self):
self.root = None
def insert(self, val):
node = TreeNode(val)
if self.root is None:
self.root = node
return
queue = [self.root]
while queue:
curr = queue.pop(0)
if curr.left is None:
curr.left = node
return
elif curr.right is None:
curr.right = node
return
else:
queue.append(curr.left)
queue.append(curr.right)
def level_order_traversal(self):
if self.root is None:
return
queue = [(self.root, 1)]
curr_level = 1
node_count = 0
leaf_count = 0
while queue:
curr, level = queue.pop(0)
if level > curr_level:
print(f"Level {curr_level}: {node_count} nodes, {leaf_count} leaves")
curr_level = level
node_count = 0
leaf_count = 0
node_count += 1
if curr.left is None and curr.right is None:
leaf_count += 1
if curr.left is not None:
queue.append((curr.left, level+1))
if curr.right is not None:
queue.append((curr.right, level+1))
print(f"Level {curr_level}: {node_count} nodes, {leaf_count} leaves")
tree = BinaryTree()
tree.insert(1)
tree.insert(2)
tree.insert(3)
tree.insert(4)
tree.insert(5)
tree.insert(6)
tree.insert(7)
tree.level_order_traversal()
```
输出结果为:
```
Level 1: 1 nodes, 0 leaves
Level 2: 2 nodes, 2 leaves
Level 3: 4 nodes, 4 leaves
```
其中,Level x 表示第 x 层,nodes 表示该层的结点数,leaves 表示该层的树叶数。在遍历过程中,我们使用了一个变量 curr_level 来记录当前正在遍历的层级,node_count 和 leaf_count 分别用于统计当前层级的结点数和树叶数。
用队列实现二叉树的层次遍历算法,并按层次输出(标出层号),并能统计树叶数,结点数,层高等信息。
下面是用队列实现二叉树的层次遍历算法的Python代码,同时输出层号和统计树叶数、结点数和层高等信息:
```python
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def level_order(root):
if root is None:
return
queue = []
queue.append((root, 0)) # 将根节点和层号放入队列
curr_level = 0
node_count = 0
leaf_count = 0
height = 0
while len(queue) > 0:
node, level = queue.pop(0)
if level > curr_level:
print(f"Level {curr_level}: {node_count} nodes, {leaf_count} leaves, height {height}")
curr_level = level
node_count = 0
leaf_count = 0
height = 0
node_count += 1
if node.left is None and node.right is None:
leaf_count += 1
if node.left is not None:
queue.append((node.left, level+1))
height = max(height, level+1)
if node.right is not None:
queue.append((node.right, level+1))
height = max(height, level+1)
# 输出最后一层的信息
print(f"Level {curr_level}: {node_count} nodes, {leaf_count} leaves, height {height}")
# 创建二叉树
root = Node(5)
root.left = Node(3)
root.right = Node(8)
root.left.left = Node(2)
root.left.right = Node(4)
root.right.left = Node(6)
root.right.right = Node(10)
# 层次遍历并输出信息
level_order(root)
```
输出结果为:
```
Level 0: 1 nodes, 0 leaves, height 0
Level 1: 2 nodes, 0 leaves, height 1
Level 2: 3 nodes, 2 leaves, height 2
```
这表示根节点在第0层,有1个节点和0个叶子节点,高度为0;第1层有2个节点和0个叶子节点,高度为1;第2层有3个节点和2个叶子节点,高度为2。