问题
任意给一个二叉树,使之左右镜像反转。
文章图片
这是一个经典面试题,考察tree这种数据结构的构建和递归操作。
class Node(object):
def __init__(self, val):
self.val = val.astype(np.int32)
self.left = None
self.right = Nonedef create_subtree(n_layers, vals, layer):
'''Inputs a list `vals` to provide the values for the tree nodes.
It assumes that `vals` contains enough elements to fill all the Nodes of
this tree, and takes the element in the middle of this list `vals` to
build the current Node.
'''
if layer >= n_layers:
return None
pivot = len(vals) // 2
root = Node(vals[pivot])
root.left = create_subtree(n_layers, vals[:pivot], layer + 1)
root.right = create_subtree(n_layers, vals[pivot+1:], layer + 1)
return rootdef swap_subtree(node):
if node is None: return
node.left = swap_subtree(node.left)
node.right = swap_subtree(node.right)
node.right, node.left = node.left, node.right
return nodedef main():
n_layers = 5
vals = np.array(range(0, 100))
bt = create_subtree(n_layers, vals, 0)
bt_swap = swap_subtree(bt)
【【面试】反转二叉树 binary tree】以上main()函数给出一个测试用例。测试结果的动画贴在本文的头部。
推荐阅读
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- linux笔记|linux 常用命令汇总(面向面试)
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 面试|我经历的IT公司面试及离职感受(转)
- android-面试|我经历的IT公司面试及离职感受
- Java|一个月内面了30家企业,不断对比薪资,我从18K变成了38K
- vue|Vue面试常用详细总结
- java人生|35K 入职华为Java开发那天,我哭了(这 5 个月做的一切都值了)
- Android|年后备战金三银四(Android面试吃透这一篇就没有拿不到的offer......)
- java|后悔没有早点遇到它 , 直接从 12K 涨到了 30K