二叉樹是我們平時使用較多的一種資料結構,它是每個節點最多有兩個子樹的樹結構。關於樹的概念和性質就不再多介紹,我來對數的建立和一些操作進行總結。
首先我們定義樹的資料型別:
typedef struct tree_node
*tree_node;
樹有乙個資料域和兩個指標域,採用的是鏈式儲存結構;
我們定義乙個tree_node t之後我們首先要建立並輸入乙個樹:
tree_node createtree() //樹的建立
return t;
}
在輸入樹的過程中,我們需要輸入符號來判斷這個樹的節點到這裡是否停止了,所以有乙個判斷if(ch=='#');
這樣我們便建立好乙個樹了,並且輸入了資料,我們對數最基本也是重要的操作當然就是遍歷,對於樹的遍歷我們有三種方式,分別是前序遍歷,中序遍歷,後序遍歷,我們先看看遞迴遍歷的方法:
void preorder(tree_node t) //先序遍歷
}
void intorder(tree_node t) //中序遍歷
}
void preorder(tree_node t) //先序遍歷
}
這是我們用遞迴的方式對樹進行的遍歷,若我們不採用遞迴的方式,我們如何進行遍歷:
void preorder(tree_node t) //前序遍歷
if(!s.empty())
}}
void intorder(tree_node t) //中序遍歷
if(!s.empty())
}}
typedef struct node1
*btnode;
void postorder(tree_node t) //後序遍歷
if(!s.empty())
else}}
}
非遞迴的的後序遍歷比較麻煩,需要我們沿著左子樹一直向下搜尋,直到沒有左子樹的時候,我們此時不能出棧訪問,我們還需講右子樹入棧,我們把右子樹做了相同處理之後,我們才可以出棧訪問,這樣我們就需要多設定乙個標識每個節點第幾次到達棧頂,只有第二次到達棧頂的時候我們才可以出棧訪問。
完整的**如下:
#include#include#include#includeusing namespace std;
typedef struct tree_node
*tree_node;
typedef struct node1
*btnode;
tree_node createtree() //樹的建立
return t;
}void preorder(tree_node t) //先序遍歷
}//void preorder(tree_node t) //先序遍歷
//// if(!s.empty())
//
// }
//}void intorder(tree_node t) //中序遍歷
}//void intorder(tree_node t) //中序遍歷
//// if(!s.empty())
//
// }
//}void postorder(tree_node t) //後序遍歷
}//void postorder(tree_node t) //後序遍歷
//// if(!s.empty())
//
// else
//
// }
// }
//}int main()
; int height;
int i,a=0;
tree_node t;
t=createtree();
printf("前序遍歷:");
preorder(t) ;
printf("\n");
printf("中序遍歷:");
intorder(t);
printf("\n");
printf("後序遍歷:");
postorder(t);
printf("\n");
}
二叉樹的建立和遞迴 非遞迴遍歷
二叉樹的葉子結點總是比雙分支結點多乙個。滿二叉樹 如果有h層,則總結點個數為2h 次方 1,每一層有2h 1 次方 個結點。分析 演算法描述 include include define n 9 定義結構體 結點資訊 typedef struct nodebtnode 結構體名為btnode btn...
二叉樹遍歷(遞迴 非遞迴)
二叉樹以及對二叉樹的三種遍歷 先根,中根,後根 的遞迴遍歷演算法實現,以及先根遍歷的非遞迴實現。node public class node public node left public node right public object value 遍歷訪問操作介面 public inte ce ...
C 二叉樹的建立,遍歷(遞迴,非遞迴)
include include define maxsize 20 typedef struct bitnodebitnode,bitree 浜屽弶鏍戠殑閫掑綊寤虹珛 inti 0 bitree create bitree t,char s else else return t 涓 簭閬嶅巻 voi...