我有一些有关BST的代码,并且我想使用BST级别顺序遍历(节点左右-左右)打印输出。这是代码:
import sys
class Node:
def __init__(self,data):
self.right=self.left=None
self.data = data
class Solution:
def insert(self,root,data):
if root==None:
return Node(data)
else:
if data<=root.data:
cur=self.insert(root.left,data)
root.left=cur
else:
cur=self.insert(root.right,data)
root.right=cur
return root
def levelOrder(self,root):
#Write your code here
nodes_to_search = list()
nodes_traversed = ''
nodes_to_search.append(root)
while len(nodes_to_search) > 0:
nodes = nodes_to_search.pop(0)
if nodes.left:
nodes_to_search.append(nodes.left)
if nodes.right:
nodes_to_search.append(nodes.right)
nodes_traversed += str(nodes.data) + ' '
print(nodes_traversed)
T=int(input())
myTree=Solution()
root=None
for i in range(T):
data=int(input())
root=myTree.insert(root,data)
myTree.levelOrder(root)
6
3
5
4
7
2
1 # it prints out 3 5 2 1 4 7
输出就像我预期的那样,node-left-right。但是我不明白levelOrder()
函数如何像这样打印?
答案 0 :(得分:0)
简单的列表操作,以保持顺序
await
nodes = nodes_to_search.pop(0)
答案 1 :(得分:0)
您得到的输出不正确。如果您使用输入(3、5、4、7、2、1)进行BST,则将获得此输出-水平顺序遍历中的3 2 5 1 4 7 [因为所有较低的值都会在根元素,所有较高的值将在根节点的右侧]。该方案是首先打印根元素,然后转到每个级别并打印该级别中的所有元素。
我将建议您按照任何程序进行操作,
BFS过程:
function BFSearch(Tree root){
Queue queue.enqueue(root);
while(queue isnot Empty){
Root tempRoot = queue.dequeue();
print -> tempRoot.element; // visting node
/*break-down each level left to right*/
if(tempRoot.left isnot Empty){
queue.enqueue(tempRoot.left);
}
if(tempRoot.right isnot Empty){
queue.enqueue(tempRoot.right);
}
}
}
您也可以使用以下递归方法-
function driver(){
// visiting the root first;
print -> root.node;
levelOrderPrinting(root);
}
function levelOrderPrinting(Tree root){
if(root is null)
return;
if(root.left isnot Empty)
print -> root.left.node;
if(root.right isnot Empty)
print -> root.right.node;
// break down each level left to right
levelOrderPrinting(root.left);
levelOrderPrinting(root.right);
}