給你二叉樹的根節點?
root
?,返回其節點值的?鋸齒形層序遍歷?。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)輸入:root = [3,9,20,null,null,15,7] 輸出:[[3],[20,9],[15,7]]
? ? ? ?大家一定對樹的層序遍歷已經能夠耳熟能詳了吧,這道題其實就在二叉樹的層序遍歷的基礎上對它的結果進行了一點點的修改
? ? ? ?通過大家的仔細觀察不難發現:是將結果集中的索引為奇數的數組進行了一次翻轉,我們就可以利用模擬,它讓做什么,我們就做什么的方法進行解決(樹的程層序遍歷是一定要會的,最好是可以進行默寫甚至是進行手撕)
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {List<List<Integer>> list=new ArrayList<>();if(root==null){return list;}Queue<pair> queue=new LinkedList<>();queue.offer(new pair(root,0));while(!queue.isEmpty()){pair pair=queue.poll();TreeNode node=pair.node;int level=pair.level;if(list.size()==level){list.add(new ArrayList<>());}List<Integer> item=list.get(level);item.add(node.val);if(node.left!=null){queue.offer(new pair(node.left,level+1));}if(node.right!=null){queue.offer(new pair(node.right,level+1));}}return list;}public class pair{private TreeNode node;private Integer level;public pair(TreeNode node,Integer level){this.level=level;this.node=node;}}
接下來我們對其結果數組進行操作:
for (int i = 0; i <list.size(); i++) {if(i%2==1){Collections.reverse(list.get(i));}
? ? ? ?這樣的這道題就完美的結束了,一般讀題的時候都想想可以用我們所熟悉的數據結構或者是模板去以出發點去進行思考,這樣的話可以事半功倍