python二叉树求子树
时间: 2025-01-13 22:43:11 浏览: 30
### Python 实现二叉树并查找子树
#### 定义二叉树节点类
为了实现二叉树以及在其上执行操作,首先需要定义一个表示二叉树节点的类 `TreeNode`。此类包含三个属性:当前节点存储的值 (`value`)、指向左孩子的指针 (`left`) 以及指向右孩子的指针 (`right`)。
```python
class TreeNode:
def __init__(self, value=0, left=None, right=None):
self.value = value
self.left = left
self.right = right
```
#### 构建二叉树实例
通过上述定义好的 `TreeNode` 类型对象来创建具体的二叉树结构。可以通过设置各个节点之间的连接关系完成整棵树的建立[^2]。
#### 子树匹配函数设计
对于给定的一棵大树 T 和一棵小树 S ,要判断S 是否为T 的子树,则可以从根结点开始比较两棵树是否相同;如果不同则继续分别尝试用T 左/右分支作为新的大数再做同样的对比直到找到完全一致的部分为止或者遍历结束仍无果返回False 。这里给出一种基于递归的方法:
```python
def is_subtree(large_tree_node, small_tree_node):
if not large_tree_node and not small_tree_node:
return True
if not large_tree_node or not small_tree_node:
return False
# Check from root node of both trees.
same_trees = are_identical(large_tree_node, small_tree_node)
# If the above call returns false then check for subtree in left and right children of larger tree
if same_trees:
return True
else:
return (is_subtree(large_tree_node.left, small_tree_node) or
is_subtree(large_tree_node.right, small_tree_node))
def are_identical(root1, root2):
"""Helper function to determine whether two binary trees rooted at given nodes are identical."""
if not root1 and not root2:
return True
if not root1 or not root2:
return False
return ((root1.value == root2.value) and
are_identical(root1.left , root2.left ) and
are_identical(root1.right, root2.right))
```
这段代码实现了两个主要功能:一是检测整个二叉树是否相等(`are_identical`);二是检查较小的那颗二叉树是不是较大一颗中的某个部分即所谓的“子树”(`is_subtree`). 这里采用的是先序的方式来进行逐层深入地验证每一个可能成为候选者的节点及其后代们是否存在符合条件的情况[^4].
阅读全文
相关推荐















