1 回答

TA貢獻1786條經(jīng)驗 獲得超11個贊
要從 BST 打印數(shù)據(jù),您需要進行順序遍歷。在二叉搜索樹 (BST) 的情況下,中序遍歷以非遞減順序給出節(jié)點。要以非遞增順序獲取 BST 的節(jié)點,可以使用 Inorder 遍歷的變體,其中可以使用 Inorder 遍歷 s reversed。
算法 Inorder(tree) 1.遍歷左子樹,即調(diào)用Inorder(left-subtree) 2.訪問根。3.遍歷右子樹,即調(diào)用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);
}
時間復(fù)雜度:O(n)
如果樹不是BST。您可以創(chuàng)建 List 并將樹的值寫入列表,然后按升序?qū)α斜磉M行排序。
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));
}
}
添加回答
舉報