目錄
使用函數(shù)實(shí)現(xiàn)
使用雙端隊(duì)列實(shí)現(xiàn)
請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù)按照之字形順序打印二叉樹(shù),即第一行按照從左到右的順序打印,第二層按照從右到左的順序打印,第三行再按照從左到右的順序打印,其他行以此類(lèi)推。
例如:
給定二叉樹(shù):?[3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回其層次遍歷結(jié)果:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-677650.html
[ [3], [20,9], [15,7] ]
提示:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-677650.html
節(jié)點(diǎn)總數(shù) <= 1000
使用函數(shù)實(shí)現(xiàn)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
List<List<Integer>> res=new ArrayList<>();
public List<List<Integer>> levelOrder(TreeNode root) {
helper(root,0);
return res;
}
private void helper(TreeNode root,int level){
if(root==null)
return;
if(res.size()==level){
res.add(new ArrayList<>());
}
if(level%2==0){
res.get(level).add(root.val);
}else{
res.get(level).add(0,root.val);
}
helper(root.left,level+1);
helper(root.right,level+1);
}
}
使用雙端隊(duì)列實(shí)現(xiàn)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
boolean isEven = false;//從1開(kāi)始,第一行不是偶數(shù)
if(root==null) return new ArrayList<>();
List<List<Integer>> ans = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(true){
int size = queue.size();
LinkedList<Integer> item = new LinkedList<>();
for(int i=0;i<size;i++){
root = queue.poll();
if(!isEven) item.addLast(root.val);
else item.addFirst(root.val);
if(root.left!=null) queue.offer(root.left);
if(root.right!=null) queue.offer(root.right);
}
isEven = !isEven;
ans.add(item);
if(queue.isEmpty()) break;
}
return ans;
}
}
到了這里,關(guān)于劍指 Offer 32 - III. 從上到下打印二叉樹(shù) III的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!