一、二叉樹基本操作
1、二叉樹的建立(二叉鏈)
a = ;(『#』代表null)。
2、二叉樹的遍歷
(1)迭代法遍歷(①前序遍歷②中序遍歷③後序遍歷)
(2)遞迴法遍歷(①前序遍歷②中序遍歷③後序遍歷)
(3)層序遍歷。
前序遍歷也叫先根遍歷:訪問順序:根–>左子樹–>右子樹。
中序遍歷也叫中根遍歷:訪問順序:左子樹–>根–>右子樹。
後續遍歷也叫後根遍歷: 訪問順序:左子樹–>右子樹–>根。
層序遍歷:訪問順序:從根節點到葉子節點(同一層中先左子樹再右子樹)。
二、函式**及測試結果
1、二叉樹的建立
btnode* buytreenode(datatype x) //建立樹的節點
btnode* createbtree(datatype *a,size_t *index,datatype invalid) //建立一棵二叉樹
return root; //返回根節點位址
}
2、二叉樹的遍歷
(1)迭代法(棧和佇列相關知識棧和佇列基本知識)
①前序遍歷
void btreeprevorder(btnode *root) //迭代法前序遍歷
}top = stacktop(&s); //左子樹為空,取棧頂
stackpop(&s);
tmp = top->right; //訪問右子樹}}
②中序遍歷
void btreeinorder(btnode *root) //中序遍歷
}top = stacktop(&s); //左子樹為空,取棧頂
printf("%d ",top->
data);
stackpop(&s);
tmp = top->right; //訪問右子樹}}
③後序遍歷
void btreebackorder(btnode *root) //後序遍歷
}top = stacktop(&s); //左子樹為空,取棧頂
if (null
== top->right || top->right == prev)
else
tmp = top->right; //訪問右子樹}}
(2)遞迴法
①前序遍歷
void btreeprevorderr(btnode *root) //前序遍歷
printf("%d ",root->
data); //根
btreeprevorderr(root->left); //左
btreeprevorderr(root->right); //右
}
②中序遍歷
void btreeinorderr(btnode *root) //中序遍歷
btreeinorderr(root->left); //左
printf("%d ",root->
data); //根
btreeinorderr(root->right); //右
}
③後續遍歷
void btreebackorderr(btnode *root) //後序遍歷
btreebackorderr(root->left); //左
btreebackorderr(root->right); //右
printf("%d ",root->
data); //根
}
(3)層序遍歷。(棧和佇列相關知識棧和佇列基本知識)
void btreefloororder(btnode *root) //層序遍歷
if (front->right)}}
運算結果:
1,前序遍歷
2、中序遍歷
3、後序遍歷
4、層序遍歷
完整源**請戳二叉樹簡單操作完整**
二叉樹基本操作(上)
一 二叉樹簡單操作 1 二叉樹的建立 二叉鏈 a 代表null 2 二叉樹的遍歷 1 迭代法遍歷 前序遍歷 中序遍歷 後序遍歷 2 遞迴法遍歷 前序遍歷 中序遍歷 後序遍歷 3 層序遍歷。二 完整 1 binarytree.h ifndef tree h define tree h include ...
二叉樹基本操作
tree.h ifndef tree h define tree h include typedef int element 定義二叉樹 typedef struct nodetreenode void preorder treenode root 遞迴前序遍歷 void inorder treen...
二叉樹基本操作
一.二叉樹的定義 二.二叉樹的建立 定義一棵無資料的二叉樹 6 int left size 7 int right size 為了操作簡便,我們定義一棵不需要儲存資料的二叉樹,只要能儲存節點之間的邏輯關係就行,所以用兩個陣列來表示。left i 第i個節點的左子節點的序號 right i 第i個節點...