程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++數據結構學習:二叉樹(4)

C++數據結構學習:二叉樹(4)

編輯:C++入門知識
  才剛開了個頭,就要說再見了——在樹這裡,除了二叉樹,別的都還沒有講。為什麼可以總結了呢?因為前面已經涉及到了樹的兩個基本用途,而假如再講B+、B-,就不能不提到搜索,假如是勝者樹就不能不提到排序。為此,把這部分放到後面。 <!-- frame contents --> <!-- /frame contents --> 我前面所做的努力,只是讓你有個基本概念,什麼時候記得用樹。
  
  樹的兩個基本用途,可以用物質和精神來比喻。
  
  一個用途是做為數據儲存,儲存具有樹結構的數據——目錄、族譜等等。為了在實際上是線性的儲存載體上(內存、磁盤)儲存非線性的樹結構,必須有標志指示出樹的結構。因此,只要能區分根和子樹,樹可以采取各種方法來儲存——多叉鏈表、左子女-右兄弟二叉鏈表、廣義表、多維數組。由於操作的需求,儲存方法並不是隨意選取的。比如,在並查集的實現上,選取的是雙親鏈表。
  
  一個用途是做為邏輯判定,此時會經常聽到一個名詞——判定樹。最常用的結構是二叉樹,一個孩子代表true,一個孩子代表false。關於多叉判定樹,有個例子是求8皇後的全部解——這個連高斯都算錯了(一共是92組解,高斯最開始說76組解),我們比不上高斯,但是我們會讓computer代勞。
  
  就像哲學界到現在還糾纏於物質和精神本源問題,實際上在樹這裡也是如此。有些情況下,並不能區分是做為儲存來用還是做為判定來用,比如搜索樹,既儲存了數據,還蘊涵著判定。
  
  和後面的圖相比,樹更基本,也更常用。你可以不知道最短路徑怎麼求,卻每時每刻都在和樹打交道——看看你電腦裡的文件夾吧。
  
   更多內容請看C/C++技術專題  數據結構  數據結構教程專題,或
  最後,附帶一個求N皇後的全部解的程序。
  
  #include
  
  #defineN8
  
  intlayout[N];//布局
  
  intkey=0;
  
  intjudge(introw,intcol)//判定能否在(row,col)放下
  
  {
  
   <!-- frame contents --> <!-- /frame contents -->   inti;
  
  for(i=0;i     
  {
  
  if(layout[i]==col)return0;//同一列
  
  if(i-layout[i]==row-col)return0;//同一條主對角線
  
  if(i+layout[i]==row+col)return0;//同一條副對角線
  
  }
  
  
   更多內容請看C/C++技術專題  數據結構  數據結構教程專題,或   return1;
  
  }
  
  voidlay(introw)//在row行上放Queen
  
  {
  
  inti;
  
  if(row==N)//放完N個Queen輸出布局
  
  {
  
  printf(" %02d",++key);
  
   <!-- frame contents --> <!-- /frame contents -->   for(i=0;i     
  }
  
     
  else
  
  {
  
  for(i=0;i     
  {
  
  layout[row]=i;
  
  if(judge(row,i))lay(row+1);
  
  }
  
  }
  
  }
  
  intmain()
  
  {
  
  lay(0);
  
  return0;
  
  }
  
  
   更多內容請看C/C++技術專題  數據結構  數據結構教程專題,或
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved