[資料結構] 二叉樹的建立及其基本操作
阿新 • • 發佈:2019-02-12
如圖:
程式碼:
#include <iostream> #include <stdio.h> #include <algorithm> #include <string.h> using namespace std; char ch; typedef struct BinNode { char data; struct BinNode *lchild,*rchild; }BinNode,*BinTree; //二叉樹鏈式儲存結構 void CreateBinTree(BinTree &T)//先序建立二叉樹 { ch=cin.get(); if(ch==' ') T=NULL; else if(ch=='\n') return; else { T=(BinNode*)malloc(sizeof(BinNode)); T->data=ch;//這是根節點 CreateBinTree(T->lchild);//建立左孩子 CreateBinTree(T->rchild);//建立右孩子 } } void PreOrder(BinTree T)//前序遍歷二叉樹 { if(T!=NULL) { cout<<T->data; PreOrder(T->lchild); PreOrder(T->rchild); } } void InOrder(BinTree T)//中序遍歷二叉樹 { if(T!=NULL) { InOrder(T->lchild); cout<<T->data; InOrder(T->rchild); } } void PostOrder(BinTree T)//後序遍歷二叉樹 { if(T!=NULL) { PostOrder(T->lchild); PostOrder(T->rchild); cout<<T->data; } } int cnt=0; int countNode(BinTree T)//求二叉樹中節點的個數 { if(T) { cnt++; countNode(T->lchild); countNode(T->rchild); } return cnt; } int depthval=0; int dl=0; int dr=0; int Depth(BinTree T)//求二叉樹的高度 { if(!T) return 0; else { dl=Depth(T->lchild); dr=Depth(T->rchild); depthval=1+(dl>dr?dl:dr); return depthval; } } int main() { //freopen("in.txt", "r", stdin); BinTree T; cout<<"按照先序次序輸入二叉樹各個節點的元素值,葉子節點為空用空格表示:"<<endl; CreateBinTree(T); cout<<"先序遍歷二叉樹為:"<<endl; PreOrder(T); cout<<endl; cout<<"中序遍歷二叉樹為:"<<endl; InOrder(T); cout<<endl; cout<<"後序遍歷二叉樹為:"<<endl; PostOrder(T); cout<<endl; cout<<"二叉樹中節點的個數為:"<<endl; cout<<countNode(T)<<endl; cout<<"二叉樹的深度為:"<<endl; cout<<Depth(T)<<endl; return 0; }
執行截圖:
注意輸入的時候G後面還有兩個空格