Leetcode 二叉樹層遍歷演算法

2021-06-22 16:50:18 字數 1278 閱讀 2271

需求:

以層遍歷一棵二叉樹,二叉樹的結點結構如下

struct tree_node;

例如://   1

//   / \

// 2   3

//     /

//    4

//     \

//      5

層遍歷後輸出1,2,3,#,#,4,#,#,5,#代表該結點為空。

要求:空間複雜度為o(n),時間複雜度為o(n)

思路:使用乙個大小為n的陣列,以逐層結點方式記錄該陣列;

掃瞄本層同時列印出下層結點的值或空值。

陣列在這裡起到可重複索引上一層結點的作用。

**實現:

#include #include #include struct tree_node;

struct tree_node;

typedef struct tree_node treenode;

//*先序為dlr(d:根節點,l:左子樹,r:右子樹)

// a

// / \

// b c

// / \ / \

// d * * e

//*/

//先序序列為abdce,輸入為abd***c*e**(*表示空格,代表空樹),輸入按滿二叉樹輸入

//每乙個節點都是乙個子樹的根節點

void pre_create_tree(treenode **t)

else

else }}

void pre_visit_tree(treenode *t, int *n)

else

}typedef structtreenode_info;

//思路:用n個元素陣列以層順序記錄二叉樹

// 1

// / \

// 2 3

// /

// 4

// \

// 5

//記錄為: 1 2 3 4 5

void level_visit_tree(treenode *t, int n)

else

printf("# ");

if((*temp)->rc!=null)

else

printf("# ");

temp++;

} tt = tt+cnt;

levelcnt=levelcnttemp; }}

int main(void)

二叉樹層序遍歷 求二叉樹的層序遍歷

給定乙個二叉樹,返回該二叉樹層序遍歷的結果,從左到右,一層一層地遍歷 例如 給定的二叉樹是,該二叉樹層序遍歷的結果是 3 9,20 15,7 示例1 輸入 返回值 1 2 示例2輸入 返回值 1 2,3 4,5 解題思路 重點是如何把在一層的節點放到一起,設定乙個引數專門放一層的節點 class t...

按層遍歷二叉樹

include include typedef struct bitnodebitnode,bitree 定義二叉樹型別 typedef struct qnodeqnode,queueptr 建立鏈 typedef struct linkqueue 建立佇列 void enqueue linkque...

層序遍歷二叉樹

要求 設計乙個演算法層序遍歷二叉樹 同一層從左到右訪問 我寫了乙個演算法 用乙個佇列儲存被訪問的當前節點的左右孩子以實現層序遍歷。status hierarchybitree bitree t,status visit telemtype e destroyqueue q 釋放佇列空間 return...