樹 二叉樹的遍歷

2021-10-09 08:03:46 字數 2745 閱讀 8386

參考大佬的講解:**隨想錄,總結的很好

107. 二叉樹的層次遍歷 ii

採用自頂向下,一層一層遍歷,然後逆轉就是自底向上。

1.一層一層遍歷樹,這裡用到的是佇列來做,以root開始

2.將root放進佇列,第一層就只有root這乙個節點,當佇列不為空,讀取佇列中的長度size,表示的是一層節點的數目,第一層的話是size = 1。

3.然後遍歷這一層每乙個節點,用臨時變數node儲存當前節點,並將佇列中該元素pop出去,然後判斷當前節點是否為空,不為空則繼續(為空的話沒必要繼續啊,值都沒有)

4.將當前節點的值存起來放到levelnum,然後判斷當前節點的左右孩子是否為空,不為空就放進佇列,作為下一層

5.將size--,回到3執行,表示進行這一層的下乙個節點

6.size==0,表示這一層所有節點都遍歷完了,那麼就要把levelnum的值放入結果res儲存,並把它清空,作為遍歷下一層時儲存使用。

7.回到2執行,表示開始遍歷下一層,隊列為空時,表示遍歷完所有層,結束

8.逆序reverse

自底向上:

/**2-層次遍歷:自底向上

* definition for a binary tree node.

* struct treenode

* };

*/class solution ;

vector> res;

vectorlevel;

queueque;

que.push(root);

while(!que.empty())

res.push_back(level);

level.clear();

}reverse(res.begin(), res.end());

return res;

}};

自定向下:

/**1-層次遍歷:自定向下 

* definition for a binary tree node.

* struct treenode

* };

*/class solution ;

vector> res;

vectorlevel;

queueque;

que.push(root);

while(!que.empty())

res.push_back(level);

level.clear();

}return res;

}};

/**3-層次遍歷右子樹

* definition for a binary tree node.

* struct treenode

* };

*/class solution ;

vectorres;

queueque;

que.push(root);

while(!que.empty())

}return res;

}};

/**4-層次遍歷求每層平均值

* definition for a binary tree node.

* struct treenode

* };

*/class solution ;

vectorres;

queueque;

que.push(root);

while(!que.empty())

}return res;

}};

/*5-層次遍歷n叉樹:自頂向下

// definition for a node.

class node

node(int _val)

node(int _val, vector_children)

};*/

class solution ;

vector> res;

vectorlevel;

queueque;

que.push(root);

while(!que.empty())

}res.push_back(level);

level.clear();

}return res;

}};

/**7--層次遍歷方式:找一層中最大值

* definition for a binary tree node.

* struct treenode

* treenode(int x) : val(x), left(nullptr), right(nullptr) {}

* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}

* };

*/class solution ;

vectorres, temp;

queueque;

que.push(root);

while(!que.empty())

sort(temp.begin(), temp.end());

res.push_back(temp.back());

temp.clear();

}return res;

}};

二叉樹遍歷(樹)

description 樹和二叉樹基本上都有先序 中序 後序 按層遍歷等遍歷順序,給定中序和其它一種遍歷的序列就可以確定一棵二叉樹的結構。假定一棵二叉樹乙個結點用乙個字元描述,現在給出中序和按層遍歷的字串,求該樹的先序遍歷字串。input 輸入檔案flist.in共兩行,每行是由字母組成的字串 一行...

構建二叉樹 遍歷二叉樹

陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...

玩轉二叉樹(二叉樹的遍歷)

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 給定一棵二叉樹的中序遍歷和前序遍歷,請你先將樹做個鏡面反轉,再輸出反轉後的層序遍歷的序列。所謂鏡面反轉,是指將所有非葉結點的左右孩子對換。這裡假設鍵值都是互不相等的正整數。輸入格式 ...