mirror of
				https://github.com/krahets/hello-algo.git
				synced 2025-11-04 14:18:20 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			75 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
'''
 | 
						|
File: print_util.py
 | 
						|
Created Time: 2021-12-11
 | 
						|
Author: Krahets (krahets@163.com)
 | 
						|
'''
 | 
						|
 | 
						|
import copy
 | 
						|
import queue
 | 
						|
from .binary_tree import TreeNode, tree_to_list
 | 
						|
from .linked_list import ListNode, linked_list_to_list
 | 
						|
 | 
						|
def print_matrix(mat):
 | 
						|
    """Print a matrix
 | 
						|
 | 
						|
    Args:
 | 
						|
        mat ([type]): [description]
 | 
						|
    """    
 | 
						|
    pstr = []
 | 
						|
    for arr in mat:
 | 
						|
        pstr.append('  ' + str(arr))
 | 
						|
 | 
						|
    print('[\n' + ',\n'.join(pstr) + '\n]')
 | 
						|
 | 
						|
def print_linked_list(head):
 | 
						|
    """Print a linked list
 | 
						|
 | 
						|
    Args:
 | 
						|
        head ([type]): [description]
 | 
						|
    """    
 | 
						|
    arr = linked_list_to_list(head)
 | 
						|
    print(' -> '.join([str(a) for a in arr]))
 | 
						|
 | 
						|
class Trunk:
 | 
						|
    def __init__(self, prev=None, str=None):
 | 
						|
        self.prev = prev
 | 
						|
        self.str = str
 | 
						|
 
 | 
						|
def showTrunks(p):
 | 
						|
    if p is None:
 | 
						|
        return
 | 
						|
    showTrunks(p.prev)
 | 
						|
    print(p.str, end='')
 | 
						|
 
 | 
						|
def print_tree(root, prev=None, isLeft=False):
 | 
						|
    """Print a binary tree
 | 
						|
       This tree printer is borrowed from TECHIE DELIGHT
 | 
						|
       https://www.techiedelight.com/c-program-print-binary-tree/
 | 
						|
    Args:
 | 
						|
        root ([type]): [description]
 | 
						|
        prev ([type], optional): [description]. Defaults to None.
 | 
						|
        isLeft (bool, optional): [description]. Defaults to False.
 | 
						|
    """
 | 
						|
    if root is None:
 | 
						|
        return
 | 
						|
 
 | 
						|
    prev_str = '    '
 | 
						|
    trunk = Trunk(prev, prev_str)
 | 
						|
    print_tree(root.right, trunk, True)
 | 
						|
 
 | 
						|
    if prev is None:
 | 
						|
        trunk.str = '———'
 | 
						|
    elif isLeft:
 | 
						|
        trunk.str = '/———'
 | 
						|
        prev_str = '   |'
 | 
						|
    else:
 | 
						|
        trunk.str = '\———'
 | 
						|
        prev.str = prev_str
 | 
						|
 
 | 
						|
    showTrunks(trunk)
 | 
						|
    print(' ' + str(root.val))
 | 
						|
    if prev:
 | 
						|
        prev.str = prev_str
 | 
						|
    trunk.str = '   |'
 | 
						|
    print_tree(root.left, trunk, False)
 |