參考大佬的講解:**隨想錄,總結的很好
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 作者 陳越 給定一棵二叉樹的中序遍歷和前序遍歷,請你先將樹做個鏡面反轉,再輸出反轉後的層序遍歷的序列。所謂鏡面反轉,是指將所有非葉結點的左右孩子對換。這裡假設鍵值都是互不相等的正整數。輸入格式 ...