二叉樹演算法小結

2022-08-11 00:51:20 字數 1326 閱讀 3553

1.廣度優先遍歷

也是層序遍歷

void bfs(node *root)

}

2.深度優先遍歷

非遞迴

void dfs(node *root)

if(n->left!=null)}}

}

前序、中序、後序遍歷

遞迴寫法:

void dlr(node *root)

}void ldr(node *root)

}void lrd(node *root)

}

前中後序遍歷的非遞迴寫法

前序遍歷的非遞迴和深度優先遍歷一樣

void ldr_n(node*root)

else

}}void lrd_n(node *root)

else

else

if(pre==s.top()->left)//

若最近訪問節點是棧頂結點的左兒子,則節點指向棧頂元素右兒子(即將壓棧的節點)}}

}

求樹的高度

int height(node *root)

判斷是否是平衡二叉樹

int isbalance(node *root)

查詢最近公共父節點

node* com_father(node *root, node *a, node *b)

}

把查詢二叉樹變成雙向鍊錶

在中序遍歷的基礎上操作

node* make_list(node *root)

else

p->left=pre;

if(head==null)

pre=p;

p=p->right;}}

return

head;

}

已知前序和中序遍歷

求樹

node *betree(int preorder, int ps, int pe, int after, int

as, int

ae) }

if(i>as

) root->left=betree(preorder, ps+1, ps+i-as, after, as, i-1

);

if(iroot->right=betree(preorder, ps+i-as+1,pe, after, i+1

,ae);

return

root;

}

二叉樹知識小結

1.結點的度 樹的度 樹的深度。結點的度 乙個結點擁有的子樹的個數就是結點的度。樹的度 一棵樹的度是指該樹中結點的最大度數。樹的深度 樹中結點的最大層數稱為樹的深度或高度。2.滿二叉樹 完全二叉樹 滿二叉樹 若二叉樹中每一層結點的個數都達到最大,則該樹為滿二叉樹。完全二叉樹 若一棵二叉樹至多只有最下...

二叉樹遍歷小結

二叉樹是相當重要的資料結構,目前我還只會玩玩它的遍歷 年輕不懂事沒好好學,不然早就達到人生巔峰了 leetcode上二叉樹的簡單題,大部分通過遍歷加一點小邏輯即可解決,所以總結一下幾種遍歷方法 其實也是看題解白嫖的 二叉樹遍歷有廣度優先,深度優先兩種方式,深度優先又分先序遍歷 根,左,右 中序遍歷 ...

二叉樹演算法

include include include define elementtype int node structure constructor typedef struct bt binarytreenode,btroot function declear inorder btroot root...