【牛客劍指offer刷題】:Python:60.按之字形順序打印二叉樹

按之字形順序打印二叉樹

時間限制:1秒 空間限制:32768K 熱度指數:164165
算法知識視頻講解

題目描述

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

法1.

首先,這題需要用棧而不是隊列。比如測試用例中的例子

      8
   6   10
 5  7  9  11

第一行從左到右放入容器中,即[8]
第二行從右到左放入容器中,即[10,6]
第三行從左到右放入容器中,即[5,7,9,11]
可以看到,第三行的第一、二個元素其實是第二行最後一個元素的左、右子樹,可以看出這個容器應該是棧的結構。
同時,設置一個flag,判斷是否從左到右壓入棧。

代碼

# -*- 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 []
        right_2_left_flag = False
        res = []
        pCur = [pRoot]
        pNext = []
        temp = []
        while pCur:
            node = pCur.pop()
            if right_2_left_flag:
                if node.right:
                    pNext.append(node.right)
                if node.left:
                    pNext.append(node.left)
            else:
                if node.left:
                    pNext.append(node.left)
                if node.right:
                    pNext.append(node.right)
            temp.append(node.val)
            if not pCur:
                pCur = pNext
                pNext = []
                right_2_left_flag = not right_2_left_flag
                res.append(temp)
                temp = []
        return res
                
                    

方法2.

層次遍歷,然後反轉

代碼

#層次遍歷,然後反轉
class Solution:
    def Print(self, pRoot):
        # write code here
        if not pRoot:
            return []
        up = [pRoot]
        down = []
        res = []
        while up:
            l = []
            for i in up:
                l.append(i.val)
                if i.left:
                    down.append(i.left)
                if i.right:
                    down.append(i.right)
            res.append(l)
            up, down = down, []
        for j in range(len(res)):
            if j % 2 == 1:
                res[j] = res[j][::-1]
        return res

鏈接:https://www.nowcoder.com/questionTerminal/91b69814117f4e8097390d107d2efbe0?commentTags=Python
來源:牛客網

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章