Likouブラッシングノート:Swordはオファー32-IIIを指します。バイナリツリーIIIを上から下に印刷します(単純なリスト、キュー、バイナリツリーをレイヤーごとにトラバースし、各レイヤーをパリティ順に並べ替えます)

トピック:

剣はオファー32-IIIを指し、バイナリツリーを上から下に印刷しますIII

二分木をジグザグに印刷する機能を実装してください。つまり、最初の行は左から右に印刷され、2番目のレイヤーは右から左に印刷され、3番目の行は左から右に印刷されます。オン。

例:
二分木がある場合:[3,9,20、null、null、15,7]、
ここに画像の説明を挿入

レベルトラバーサルの結果を返します。

[
[3]、
[20,9]、
[15,7]
]

促す:

ノードの総数<= 1000

問題解決のアイデア:

バイナリツリーは、リストを使用するだけでレイヤーごとにトラバースされ、各レイヤーはパリティごとに並べ替えられます。

問題解決のPythonコード:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        if not root: return []
        ans, queue = [], collections.deque()
        queue.append(root) #初始化queue为root
        while queue:
            temp = []  #定义层输出列表
            for _ in range(len(queue)):
                node = queue.popleft()  #取出queue最左的元素,并在queue添加左右子树
                if node.left: queue.append(node.left)
                if node.right: queue.append(node.right)
                temp.append(node.val)  #层输出列表添加node的值
            ans.append(temp[::-1] if len(ans)%2!=0 else temp)  #按照ans的长度的奇偶情况,判断是否需要逆序
        return ans

ここに画像の説明を挿入

著者:a-qing-ge
リンク:https//leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof/solution/dan-chun-li -yong-lie-biao-dui-er-cha-shu-gjgu /
出典:LeetCode(LeetCode)https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha -shu-iii-lcof /

おすすめ

転載: blog.csdn.net/weixin_44414948/article/details/113783424