自动化软件工程师的面试题及答案.docxVIP

  • 2
  • 0
  • 约7.41千字
  • 约 20页
  • 2026-02-09 发布于福建
  • 举报

第PAGE页共NUMPAGES页

2026年自动化软件工程师的面试题及答案

一、编程与算法题(共5题,每题10分,总分50分)

1.题目:

编写一个函数,实现二叉树的前序遍历(根节点-左子树-右子树),要求使用递归和非递归两种方式实现。假设二叉树节点定义如下:

python

classTreeNode:

def__init__(self,val=0,left=None,right=None):

self.val=val

self.left=left

self.right=right

答案:

递归方式:

python

defpreorder_traversal_recursive(root):

ifnotroot:

return[]

result=[]

defdfs(node):

ifnotnode:

return

result.append(node.val)

dfs(node.left)

dfs(node.right)

dfs(root)

returnresult

非递归方式:

python

defpreorder_traversal_iterative(root):

ifnotroot:

return[]

result,stack=[],[root]

whilestack:

node=stack.pop()

result.append(node.val)

ifnode.right:

stack.append(node.right)

ifnode.left:

stack.append(node.left)

returnresult

解析:

递归方式通过函数调用自身实现遍历,逻辑清晰但可能因深度过大导致栈溢出。非递归方式使用栈模拟递归过程,适用于大规模数据,但代码稍复杂。两种方法时间复杂度均为O(n),空间复杂度递归为O(h),非递归为O(n)。

2.题目:

给定一个字符串,判断其是否为有效的括号组合(仅包含`()`、`[]`、`{}`)。例如:`()`、`()[]{}`有效,`(]`无效。

答案:

python

defisValid(s:str)-bool:

stack=[]

mapping={):(,]:[,}:{}

forcharins:

ifcharinmapping:

top_element=stack.pop()ifstackelse#

ifmapping[char]!=top_element:

returnFalse

else:

stack.append(char)

returnnotstack

解析:

使用栈匹配括号,遇到右括号时检查栈顶是否为对应左括号。若不匹配或栈为空时遇到右括号,则无效。遍历结束后栈应为空。时间复杂度O(n),空间复杂度O(n)。

3.题目:

实现快速排序算法,并说明其时间复杂度和稳定性。

答案:

python

defquick_sort(arr):

iflen(arr)=1:

returnarr

pivot=arr[len(arr)//2]

left=[xforxinarrifxpivot]

middle=[xforxinarrifx==pivot]

right=[xforxinarrifxpivot]

returnquick_sort(left)+middle+quick_sort(right)

解析:

快速排序通过分治思想实现,选择基准值(pivot)将数组分为小于、等于、大于三部分,再递归排序左右部分。平均时间复杂度O(nlogn),最坏O(n2)(基准值选择不当),空间复杂度O(logn)。快速排序不稳定,相同元素可能因分区改变相对顺序。

4.题目:

设计一个算法,找出无重复数字数组中的所有唯一三元组(a,b,c),满足a+b+c=0。例如:`[-1,0,1,2]`,输出`[(-1,0,1),(-1,2,1)]`。

答案:

python

defthreeSum(nums):

nums.sort()

result=[]

n=len(nums)

foriinrange(n):

ifi0andnums[i]==nums[i-1]:

continue

left,right=i+1,n-1

whileleftright:

total=nums[i]+nums[left]+nums[right]

iftotal==0:

result.appe

文档评论(0)

1亿VIP精品文档

相关文档