二叉樹構建和三種遍歷演算法實現等 資料結構 朱戰立

2021-08-25 02:49:29 字數 2199 閱讀 6603

/*2023年8月19日 16:55:56*/

/*構建乙個二叉樹函式*/

#include #include #include typedef char datatype;

typedef struct treetreenode;

/*二叉樹初始化函式*/

void treeinit(treenode **root)

(*root)->left = null;

(*root)->right = null;

}/*二叉樹左子節點插入*/

int *treeleftnode(treenode *pleft, datatype x)

temp = pleft->left; //儲存原節點的左子樹指標

pre = (treenode*)malloc(sizeof(treenode));//開闢pre的記憶體空間

pre->data = x; //將數字插入節點資料儲存中

pre->left = temp;//將原樹的左子樹指標賦值給新節點的左子樹指標

pre->right = null; //將新節點右子樹設為空;

pleft->left = pre; //新節點成為左子樹;

return pleft->left; //2023年8月19日 21:03:12 返回左子樹指標

}/*二叉樹右子節點插入*/

int *treerightnode(treenode *pright, datatype x)

temp = pright->right;

pre = (treenode*)malloc(sizeof(treenode));//開闢pre的記憶體空間

pre->data = x;

pre->right = temp;

pre->left = null;

pright->right = pre;

return pright->right; //2023年8月19日 21:02:49 返回右子樹指標

}/*二叉樹左子節點刪除*/

int *treeleftdel(treenode *dleft)

free(dleft->left);

dleft->left = null;

return dleft;

}/*二叉樹右子節點刪除*/

int *treerightdel(treenode *dright)

free(dright->right);

dright->right = null;

return dright;

}/*遞迴撤銷鍊錶的函式*/

void destroy(treenode **tree)

if ((*tree) != null && (*tree)->right != null)

free(*tree);

}/*通過遞迴實現遍歷*/

void visit(datatype item)

/*前序遍歷*/

void frontorder(treenode *tree, void visit(datatype item))

}/*中序遍歷*/

void betweenorder(treenode *tree, void visit(datatype item))

}/*後續遍歷*/

void lastorder(treenode *tree, void visit(datatype item))

}/*列印函式*/

void printbitree(treenode *tree, int num) //其中num是層數

printbitree(tree->right, num + 1);

/*訪問根節點*/

for ( i = 0; i < num-1; i++)

if (num>0)

printbitree(tree->left, num + 1);

}/*二叉樹查詢函式*/

treenode *serach(treenode *tree, datatype x)

if (tree->data==x)

if (tree->left!=null) }

if (tree->right != null) }

return null;

}/*主函式*/

int main()

二叉樹的建立和三種遍歷

二叉樹的三種遍歷是以根的遍歷順序來講的 先序遍歷 根左右 中序遍歷 左根右 後序遍歷 左右根 二叉樹是從根節點的那一層開始,從左至右讀每一層的結點讀入的。表示空結點,表示輸入結束 include include include include include include include incl...

三種二叉樹遍歷的演算法(python實現)

前序遍歷 根節點 左孩子,右孩子 前序遍歷 class treenode def init self,x self.val x self.left none self.right none class solution def init self self.x 按順序儲存節點的列表 def qian...

二叉樹的三種遍歷

重新又看了一遍二叉樹 binary tree 發現很多東西自己還沒有弄明白,原來三種遍歷方式還不是自己想象中的那樣 前序遍歷 preorder 是先輸出自己,然後左,最後右。中序遍歷 inorder 是先左,再輸出自己,最後右。後序遍歷 postorder 是先左,再右,最後輸出自己。所謂的xx遍歷...