数据结构与算法设计课后习题及答案详解
二叉树的遍历python1. 习题一:数组求和
题目描述:给定一个整数数组,编写一个函数来计算它的所有元素之和。
解题思路:遍历数组,将每个元素累加到一个变量中,最后返回累加和。
代码实现:
```python
def sum_array(arr):
result = 0
for num in arr:
result += num
return result
```
2. 习题二:链表反转
题目描述:给定一个单链表,反转它的节点顺序。
解题思路:采用三指针法,依次将当前节点的下一个节点指向上一个节点,然后更新三个指针的位置,直到链表反转完毕。
代码实现:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
= next
def reverse_list(head):
prev = None
curr = head
while curr:
next_node =
= prev
prev = curr
curr = next_node
return prev
```
3. 习题三:二叉树的层序遍历
题目描述:给定一个二叉树,返回其节点值的层序遍历结果。
解题思路:采用队列来实现层序遍历,先将根节点入队,然后循环出队并访问出队节点的值,同时将出队节点的左右子节点入队。
代码实现:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def level_order(root):
if not root:
return []
result = []
queue = [root]
while queue:
level = []
for _ in range(len(queue)):
node = queue.pop(0)
level.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
result.append(level)
return result
```
4. 习题四:堆排序
题目描述:给定一个无序数组,使用堆排序算法对其进行排序。
解题思路:堆排序的基本思想是先将数组构建成最大(小)堆,然后逐个将堆顶元素与最后一个叶子节点交换,再进行堆调整,重复这个过程直到整个数组有序。
代码实现:
```python
def heapify(arr, n, i):
largest = i
left = 2 * i + 1
right = 2 * i + 2
if left < n and arr[largest] < arr[left]:
largest = left
if right < n and arr[largest] < arr[right]:
largest = right
if largest != i:
arr[i], arr[largest] = arr[largest], arr[i]
heapify(arr, n, largest)
def heap_sort(arr):
n = len(arr)
for i in range(n // 2 - 1, -1, -1):
heapify(arr, n, i)
for i in range(n - 1, 0, -1):
arr[i], arr[0] = arr[0], arr[i]
heapify(arr, i, 0)
return arr
```
通过以上习题的解答,我们可以掌握数组求和、链表反转、二叉树的层序遍历和堆排序等数据结构与算法的基本应用。希望能对大家的学习和理解有所帮助。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论