一、题目
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
示例 1:
输入:root = [1,null,2,3]
输出:[1,2,3]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
二、解题
代码:
from queue import Queue
class Node:
def __init__(self,value,lchild,rchild):
self.value = value
self.lchild = lchild
self.rchild = rchild
r = []
#递归实现先序遍历
def preorder(root):
#全局变量
global r
# def preorder(root):
#递归出口
if not root:
return r
r.append(root.value) #相当于visit()
preorder(root.lchild)
preorder(root.rchild)
# preorder(root)
return r
#创建二叉树:使用了队列
def createTree(data):
if len(data) == 0:
return None
q = Queue()
root = Node(data[0],None,None)
i = 0
q.put(root)
while not q.empty():
#出队:出队一个节点就判断一个节点
cur = q.get()
#使用完全二叉树的公式,注意下标从0还是1开始的
if (2 * i + 1) < len(data):
lchild = Node(data[2*i+1],None,None)
cur.lchild = lchild
q.put(lchild)
if (2 * i + 2)<len(data):
rchild = Node(data[2*i+2],None,None)
cur.rchild = rchild
q.put(rchild)
i += 1
return root
if __name__ == '__main__':
tree_data = []
res = createTree(tree_data)
print(preorder(res))
# print(res)
三、知识点
1、创建一个二叉树的时候,都是按照层次遍历存储的,且是完全二叉树,需要使用队列
2、完全二叉树若是从1开始的,则公式:2i 和 2i+1;
若是从0开始的,则公式:2i+1 和 2i+2