- 1
- 0
- 约5.92千字
- 约 18页
- 2026-01-08 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年技术面试题及答案解析
一、编程题(共3题,每题20分,总分60分)
1.剑指Offer系列:二叉树的深度与遍历(20分)
题目:
给定一个二叉树,编写代码计算其深度,并实现前序遍历、中序遍历和后序遍历的非递归算法。假设二叉树节点定义如下:
python
classTreeNode:
def__init__(self,val=0,left=None,right=None):
self.val=val
self.left=left
self.right=right
要求:
-深度计算需考虑空树为0。
-遍历需使用栈实现,不能使用递归。
-输出遍历结果时需按空格分隔,如前序遍历结果为`123`。
答案:
python
深度计算(非递归)
defmax_depth(root):
ifnotroot:
return0
stack=[(root,1)]
max_d=0
whilestack:
node,d=stack.pop()
max_d=max(max_d,d)
ifnode.left:
stack.append((node.left,d+1))
ifnode.right:
stack.append((node.right,d+1))
returnmax_d
前序遍历(非递归)
defpreorder_traversal(root):
ifnotroot:
return[]
stack,res=[root],[]
whilestack:
node=stack.pop()
res.append(node.val)
ifnode.right:
stack.append(node.right)
ifnode.left:
stack.append(node.left)
return.join(map(str,res))
中序遍历(非递归)
definorder_traversal(root):
ifnotroot:
return[]
stack,res,node=[],[],root
whilestackornode:
whilenode:
stack.append(node)
node=node.left
node=stack.pop()
res.append(node.val)
node=node.right
return.join(map(str,res))
后序遍历(非递归)
defpostorder_traversal(root):
ifnotroot:
return[]
stack,res=[(root,False)],[]
whilestack:
node,visited=stack.pop()
ifnode:
ifvisited:
res.append(node.val)
else:
stack.append((node,True))
stack.append((node.right,False))
stack.append((node.left,False))
return.join(map(str,res))
解析:
-深度计算:使用栈记录节点及当前深度,通过遍历所有节点更新最大深度。空树深度为0,符合定义。
-前序遍历:遵循根-左-右顺序,先将右子节点入栈以避免左子节点先出栈。
-中序遍历:遵循左-根-右顺序,通过循环右子节点访问。
-后序遍历:可利用双栈或单栈+标记法实现,此处采用单栈+状态标记(访问过右子节点后处理)。
2.LeetCode经典:合并两个排序链表(20分)
题目:
合并两个单调递增的链表,返回合并后的头节点。假设链表节点定义如下:
python
classListNode:
def__init__(self,val=0,next=None):
self.val=val
self.next=next
要求:
-合并后链表仍需保持排序,时间复杂度O(N)。
-优化空间复杂度,不使用额外存储。
答案:
python
defmerge_two_lists(l1,l2):
dummy=ListNode(0)
current=dummy
whilel1andl2:
ifl1.vall2.val:
current.next=l1
l1=l1.next
else:
current.next=l2
l2=l2.next
current=current.next
current.next=
原创力文档

文档评论(0)