1. 程式人生 > >劍指offer 59. 按之字形順序列印二叉樹

劍指offer 59. 按之字形順序列印二叉樹

題目描述

請實現一個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。

思路:

與逐層列印二叉樹一樣,只是多了層數判定,依據層數做判定輸出。

按之字形順序列印二叉樹需要兩個棧。我們在列印某一行節點時,把下一層的子節點儲存到相應的棧裡。儲存層數,對temp_res的結果儲存時結合層數做正反序append

參考答案:

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def Print(self, pRoot):
        # write code here
        if not pRoot:
            return []
        current_layer = [pRoot]
        res = []
        layer_level = 0
        while current_layer:
            next_layer = []
            layer_res = []
            for node in current_layer:
                layer_res.append(node.val)
                if node.left:
                    next_layer.append(node.left)
                if node.right:
                    next_layer.append(node.right)
            current_layer = next_layer[:]
            if layer_level % 2 == 1:
                res.append(layer_res[::-1])
            else:
                res.append(layer_res[:])
            layer_level += 1
        return res

Note

  • 這道題要十分注意,其中current_layer 的結果 current_layer = next_layer[:],即是完全複製,直接用current_layer = next_layer會出現錯誤的。