网易2019面试真题 二叉树的深度

题目描述:求一棵二叉树的深度
输入描述:一直输入有n+1行,第一个数为n,代表二叉树全部节点的个数。后n行每行有两个数字代表父节点左孩子和是否都存在(第二行的两个数代表根节点的孩子是否存在),数字为1时代表孩子存在,-1时代表孩子不存在。节点的顺序根据父节点的情况从左到右,从上至下是排序的。其中n为整数且n<100。
输出描述:输出树的深度

示例1:
输入
2
1 -1
-1 -1
输出
2
思路:求二叉树的深度,使用简单的递归就可以,但是给定输入不是树的形式,所以我的第一个想法使用一维数组将输入存起来,然后将一维数组转化为二叉树,但是我又发现给定的树是不完全二叉树,所以我把1和-1当作树的节点的值,把一位数组先转化为完全二叉树,然后根据节点的值是否为-1进行剪枝,最后使用递归得到树的深度。代码如下:

import sys
class Treenode:
    def __init__(self, data, left, right):
        self.val = data
        self.left = left
        self.right = right
        
class Solution:
    def  build_tree(self, arr):
        node_list = []
        for i in range(len(arr)):
            node = Treenode(arr[i], None, None)
            node_list.append(node)
            
        if len(node_list) > 0:
            for i in range(int(len(arr)/2)-1):
                if node_list[2*i + 1].left is None:
                    node_list[i].left = node_list[2*i+1]
                if node_list[2*i +

你可能感兴趣的:(算法工程师)