1 回答
TA贡献1786条经验 获得超11个赞
要从 BST 打印数据,您需要进行顺序遍历。在二叉搜索树 (BST) 的情况下,中序遍历以非递减顺序给出节点。要以非递增顺序获取 BST 的节点,可以使用 Inorder 遍历的变体,其中可以使用 Inorder 遍历 s reversed。
算法 Inorder(tree) 1.遍历左子树,即调用Inorder(left-subtree) 2.访问根。3.遍历右子树,即调用Inorder(right-subtree)
/* Given a binary tree, print its nodes in inorder*/
void printInorder(Node node)
{
if (node == null)
return;
/* first recur on left child */
printInorder(node.left);
/* then print the data of node */
if(!node.isEmpty){
System.out.print(node.value+ " ");
}
/* now recur on right child */
printInorder(node.right);
}
时间复杂度:O(n)
如果树不是BST。您可以创建 List 并将树的值写入列表,然后按升序对列表进行排序。
List<Integer> treeValues = new ArrayList<Integer>();
List<Integer> treeToList(Node node){
if (node == null)
return;
printInorder(node.left);
if(!node.isEmpty){
treeValues.add(node.value);
}
printInorder(node.right);
}
void sortedTree(Node node){
List<Integer> treeData = treeToList(node);
Collections.sort(treeData);
for(int i=0; i<treeData.size();i++ ){
System.out.println(treeData.get(i));
}
}
添加回答
举报