簡體   English   中英

AVL二進制搜索樹中的節點列表,按其高度排序

[英]List of nodes in a AVL binary search tree, ordered by their height

(從計算上)獲取按其高度排序的AVL樹中的節點列表的最佳方法是什么? 例如,使用這樣的AVL: 例

輸出應為:

[A,C,G,O,B,N,H,D]

(無論順序如何,如果節點的高度相同)

您可以進行任何inorderpostorderpreorder遍歷,並計算每個節點的高度。 但是對於這個問題,我們不只是計算節點,而是將節點插入數據結構中,與adjacency list非常相似,唯一的區別是position 0 linked list存儲了所有height = 0的節點, position 1 linked list存儲了所有節點的height = 0 height = 1 ,依此類推。

為了獲得輸出,我們可以簡單地從第一個linked list開始打印每個鏈表的元素。

以下簡單的偽代碼可以完成這項工作:

void inorderTraversal(NodePointer ptr)
{
 if(ptr == NULL)
  return;
 else
 {

  inorderTraversal(ptr->left);
  if(ptr->left == NULL and ptr->right == NULL)
  {
   ptr->height = 0;
   adjacencyList[ptr->height].append(ptr->value);
  }
  else
  {
   if(ptr->left != NULL and ptr->right == NULL)
   {
    ptr->height = ptr->left->height + 1;
    adjacencyList[ptr->height].append(ptr->value);
   } 
   if(ptr->right != NULL and ptr->left == NULL)
   {
    ptr->height = ptr->right->height + 1;
    adjacencyList[ptr->height].append(ptr->value);
   } 
   if(ptr->right != NULL and ptr->left != NULL)
   {
    h1 = ptr->left->height;
    h2 = ptr->right->height;
    ptr->height = max(h1,h2)
    adjacencyList[ptr->height].append(ptr->value);    
   }    
  }   
  inorderTraversal(ptr->right);
 }  
}

現在我們可以簡單地從第一個linked list開始遍歷所有linked lists ,並按其高度的升序獲得節點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM