首页 > 编程知识 正文

二叉树面试知识点(二叉树 面试题)

时间:2023-05-06 15:23:21 阅读:103665 作者:3908

00-1010给定一棵二叉树,返回它的最大深度。

示例:

一个

/

2 3

//

4 5 6 7

返回的最大深度是3。

问题:求二叉树的最大深度

先用深度或广度遍历二叉树,找到树的最大深度。

解题思路

类型TreeNode结构{

左*TreeNode //左子节点

右*TreeNode //右子节点

价值//价值

}

二叉树的结构体

深度优先搜索

1.深度优先搜索类似于二叉树的前序遍历。

2.使用递归持续探索树的深度。

3.递归的终止条件是,如果节点为空,则返回0。然后判断左右子树的最大值,同时加1表示当前节点的高度。

func MaxDepth(root * TreeNode)int {

//如果节点为空,则不会递归向下钻取深度。

if root==nil {

返回0

}

左:=最大深度(root.left)

右:=maxDepth(root.right)

如果从左向右{

向左返回1

}

向右返回1

}时间复杂度:O(n),其中n为节点数。因为每个节点都必须被访问一次。

空间复杂度:O(logN),其中n为节点数。当树不平衡时,空间复杂度为O(N),例如,当树跛行和左撇子时。但如果树是平衡的,空间复杂度为O(logN)。

00-1010

主要思路

1.广度优先搜索使用迭代将每一层的节点放入队列。

2.队列离开队列,清空到下一层。

3.用变量标记深度。每次输入下一次记录深度时,向该变量添加1。

func MaxDepth(root * TreeNode)int {

//如果根节点为0,则直接返回0。

if root==nil {

返回0

}

队列:=make ([] * treenode,0)//创建队列。

Queue=append(queue,root) //将根节点放入队列中。

深度:=0 //声明一个深度变量

对于len(队列){ 0

//如果队列中有值,循环将继续。

Size :=len(queue) //这里,我们要遍历当前级别的队列,全部出列。

对于I :=0;isize我

v :=队列[0]

队列=队列[1:] //出列

如果v .离开!=零

Queue=append(queue,v.left) //如果有左子树,则左子树将排队。

}

如果v .对!=零

Qu=append (queue,v . right)//如果有右子树,则右子树将被排队。

}

}

深度//清除一个图层后,向变量添加1。

}

返回深度

}时间复杂度:O(n),n代表节点,每个节点都要遍历一次。

空间复杂度:O(n),最坏的情况是队列被一层节点填满。

如有错误,请指正并讨论。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。