0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

木構造の復習ついでに DFS に挑戦

Last updated at Posted at 2020-12-30

こんばんは(*´ω`)

年末、如何お過ごしでしょうか。
私はほろ酔いで何となく DFS に挑戦したので
ホロホロっとメモしていきます。('◇')ゞ

DFS の記事は、有識者が沢山いるので
説明は省きますw

なんとなく書いて動かしてみたので
その結果を共有します。

Tree_DFS.py
from collections import deque

class Node:
    def __init__(self,val,left = None,right = None,):
        self.val = val
        self.left = left
        self.right = right

class BinTree:
    def __init__(self):
        self.root = None
        
    def add(self,val):                    
        def add_node(node,val):
            runner = node
            if val < runner.val:
                if not runner.left:
                    runner.left = Node(val)
                else:
                    add_node(runner.left,val)
            if val > runner.val:
                if not runner.right:
                    runner.right = Node(val)
                else:
                    add_node(runner.right,val)
                    
        if not self.root:
            self.root = Node(val)
        else:
            add_node(self.root,val) 

    def show(self):
        
        if not self.root:
            print("None")
            return
        
        def DFS(node):
            print(node.val)
            
            if node.left:
                DFS(node.left)
            if node.right:
                DFS(node.right)
                
        return DFS(self.root)

  #case 1#
### TreeImage ###
#       5       #
#      / \      #
#     4   10    #
#    /    /\    #
#   3    6  11  #
#################


T = BinTree()
T.add(5)
T.add(4)
T.add(10)
T.add(6)
T.add(11)
T.add(3)
T.show()
実行結果.py
  #case 1#
### TreeImage ###
#       5       #
#      / \      #
#     4   10    #
#    /    /\    #
#   3    6  11  #
#################

5
4
3
10
6
11

それとなく動いているようです。
良きかな、良きかな。。

ではでは、実践行ってみましょう。
103. Binary Tree Zigzag Level Order Traversal
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).

For example:
Given binary tree [3,9,20,null,null,15,7],

Tree_image.py
    3
   / \
  9  20
    /  \
   15   7

return its zigzag level order traversal as:

result_image.py
[
  [3],
  [20,9],
  [15,7]
]

ザックリ訳ですが、
二分木を渡すから、リストで返して欲しい。
但し、前述にあるようにジグザグで読みだしてね、じゃ('ω')ノ
。。的な感じです。

ココ で前述の問題は BFS で解いてますが、
DFS の勉強がてら解けないかと思い、やってみました。
一応以下の記述で通りました。

Zig_grouping_DFS.py
class Solution:
    def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
        if not root:
            print("None")
            return

        ans = []
        level = 0
        
        def DFS(node,level):
            if len(ans) == level:
                ans.append([])
            
            ans[level].append(node.val)
            
            if node.left:DFS(node.left,level+1)
            if node.right:DFS(node.right,level+1)
            
            return ans
        
        ZigTree = DFS(root,level)
        
        for i in range(len(ZigTree)):
            if i%2 == 1:
                ZigTree[i].reverse()
                
        return ZigTree
#28ms

うーん、再帰記述はシンプルで良いのです NE!!
次は deque でもやってみようかな(*´з`)

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?