樹:n(n≥0)個結點的有限集合。
當n=0時,稱為空樹;
任意一棵非空樹滿足以下條件:
⑴ 有且僅有乙個特定的稱為根的結點;
⑵ 當n>1時,除根結點之外的其餘結點被分成m(m>0)個互不相交的有限集合t1,t2,… ,tm,其中每個集合又是一棵樹,並稱為這個根結點的子樹。
結點的度:結點所擁有的子樹的個數。
樹的度:樹中各結點度的最大值。
葉子結點:度為0的結點,也稱為終端結點。
分支結點:度不為0的結點,也稱為非終端結點。
孩子、雙親:樹中某結點子樹的根結點稱為這個結點的孩子結點,這個結點稱為它孩子結點的雙親結點;
兄弟:具有同乙個雙親的孩子結點互稱為兄弟。
路徑:如果樹的結點序列n1, n2, …, nk有如下關係:結點ni是ni+1的雙親(1<=i葉子結點只能出現在最下兩層,且最下層的葉子結點都集中在二叉樹的左部;
完全二叉樹中如果有度為1的結點,只可能有乙個,且該結點只有左孩子。
深度為k的完全二叉樹在k-1層上一定是滿二叉樹。
二叉樹基本操作
#include using namespace std;
template struct node
;template class bitree
~bitree()
void preorder()
void inorder()
void postorder()
void levelorder();
void qianorder()
void zhongorder()
void postorder();
private:
node*creat();
node*root;
void release(node*bt);
void preorder(node*bt);
void inorder(node*bt);
void postorder(node*bt);
void qianorder(node*bt);
void zhongorder(node*bt);
};template struct element
;//非遞迴後序遍歷
template void bitree:: postorder( )
while (top != -1 && s[top].flag == 2)
if (top != -1)
else
bt = null; }}
//非遞迴中序遍歷
template void bitree::zhongorder(node*bt)
while(top!=-1)
}}//非遞迴前序遍歷
template void bitree::qianorder(node*bt)
while(top!=-1)
}}template node*bitree::creat()
else bt=null;
return bt;
}//析構
template void bitree::release(node*bt)
else return;
}//前序遍歷
template void bitree::preorder(node*bt)
else
return;
}//中序遍歷
template void bitree::inorder(node*bt)
else return;
}//後序遍歷
template void bitree::postorder(node*bt)
else return;
}template void bitree::levelorder()
}int main()
while(ch=='y');
return 0;
}
二叉樹 滿二叉樹和完全二叉樹
二叉樹是一種很重要的非線性資料結構,它是樹結構的一種重要的型別 它不是樹結構的特殊情況 其特徵是每個節點最多有兩個子樹。二叉樹的特點 二叉樹每個結點最多有 2個子結點,樹則無此限制 二叉樹中 結點的子樹 分成左子樹和右子樹,即使某結點只有一棵子樹,也要指明該子樹是左子樹,還是右子樹,就是說 二叉樹是...
樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹
目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...
二叉樹和完全二叉樹
二叉樹規律 假設根節點的高度為0 二叉樹是每個節點至多只有兩個節點的樹 深度為i所在的層至多有 2 i個節點 高度為k的二叉樹至多有2 k 1 1個節點 n0表示度為0的節點,n2表示度為2的節點,存在n0 n2 1 對所有樹有 節點個數 邊數 1 完全二叉樹規律 節點數為n的完全二叉樹,其高度為 ...