当前位置:实例文章 » 其他实例» [文章]二叉树OJ实战

二叉树OJ实战

发布人:shili8 发布时间:2024-11-09 01:57 阅读次数:0

**二叉树 OJ 实战**

二叉树是一种常见的数据结构,广泛应用于算法设计、计算机科学等领域。在本文中,我们将讨论二叉树的基本概念、操作以及一些经典的问题和解决方案。

### 二叉树的定义二叉树是每个结点最多有两个子结点的树结构。每个结点都代表一个数据项,且每个结点至多有两个子结点:左孩子和右孩子。

### 二叉树的类型根据结点的排列方式,可以分为以下几种二叉树:

* **满二叉树**:所有叶结点都在同一层。
* **完全二叉树**:对于每个结点,如果它有右孩子,则左孩子一定存在,并且所有叶结点都在最后一层。
* **平衡二叉树**:任意一个结点的左子树和右子树都是平衡的。

### 二叉树的操作以下是常见的二叉树操作:

* **插入**:将新结点添加到二叉树中。
* **删除**:从二叉树中移除一个结点。
* **查找**:在二叉树中找到一个特定的结点。

### 经典问题和解决方案####1. 二叉树的最大深度**问题描述**:给定一棵二叉树,求出其最大深度。

**解决方案**:

class TreeNode:
 def __init__(self, x):
 self.val = x self.left = None self.right = Nonedef maxDepth(root):
 """
 :type root: TreeNode :rtype: int """
 if not root:
 return0 else:
 left_depth = maxDepth(root.left)
 right_depth = maxDepth(root.right)
 return max(left_depth, right_depth) +1# Example usage:
root = TreeNode(3)
root.left = TreeNode(9)
root.right = TreeNode(20)
root.right.left = TreeNode(15)
root.right.right = TreeNode(7)

print(maxDepth(root)) # Output:3


####2. 二叉树的中序遍历**问题描述**:给定一棵二叉树,输出其中序遍历结果。

**解决方案**:

class TreeNode:
 def __init__(self, x):
 self.val = x self.left = None self.right = Nonedef inorderTraversal(root):
 """
 :type root: TreeNode :rtype: List[int]
 """
 result = []
 if not root:
 return result else:
 result += inorderTraversal(root.left)
 result.append(root.val)
 result += inorderTraversal(root.right)
 return result# Example usage:
root = TreeNode(3)
root.left = TreeNode(9)
root.right = TreeNode(20)
root.right.left = TreeNode(15)
root.right.right = TreeNode(7)

print(inorderTraversal(root)) # Output: [9,3,15,20,7]


####3. 二叉树的前序遍历**问题描述**:给定一棵二叉树,输出其前序遍历结果。

**解决方案**:

class TreeNode:
 def __init__(self, x):
 self.val = x self.left = None self.right = Nonedef preorderTraversal(root):
 """
 :type root: TreeNode :rtype: List[int]
 """
 result = []
 if not root:
 return result else:
 result.append(root.val)
 result += preorderTraversal(root.left)
 result += preorderTraversal(root.right)
 return result# Example usage:
root = TreeNode(3)
root.left = TreeNode(9)
root.right = TreeNode(20)
root.right.left = TreeNode(15)
root.right.right = TreeNode(7)

print(preorderTraversal(root)) # Output: [3,9,20,15,7]


####4. 二叉树的后序遍历**问题描述**:给定一棵二叉树,输出其后序遍历结果。

**解决方案**:

class TreeNode:
 def __init__(self, x):
 self.val = x self.left = None self.right = Nonedef postorderTraversal(root):
 """
 :type root: TreeNode :rtype: List[int]
 """
 result = []
 if not root:
 return result else:
 result += postorderTraversal(root.left)
 result += postorderTraversal(root.right)
 result.append(root.val)
 return result# Example usage:
root = TreeNode(3)
root.left = TreeNode(9)
root.right = TreeNode(20)
root.right.left = TreeNode(15)
root.right.right = TreeNode(7)

print(postorderTraversal(root)) # Output: [9,15,7,20,3]


####5. 二叉树的最小深度**问题描述**:给定一棵二叉树,求出其最小深度。

**解决方案**:

class TreeNode:
 def __init__(self, x):
 self.val = x self.left = None self.right = Nonedef minDepth(root):
 """
 :type root: TreeNode :rtype: int """
 if not root:
 return0 elif not root.left and not root.right:
 return1 else:
 left_depth = minDepth(root.left)
 right_depth = minDepth(root.right)
 return min(left_depth, right_depth) +1# Example usage:
root = TreeNode(3)
root.left = TreeNode(9)
root.right = TreeNode(20)
root.right.left = TreeNode(15)
root.right.right = TreeNode(7)

print(minDepth(root)) # Output:2


####6. 二叉树的最长路径**问题描述**:给定一棵二叉树,求出其最长路径。

**解决方案**:

class TreeNode:
 def __init__(self, x):
 self.val = x self.left = None self.right = Nonedef longestPath(root):
 """
 :type root: TreeNode :rtype: int """
 if not root:
 return0 else:
 left_path = longestPath(root.left)
 right_path = longestPath(root.right)
 return max(left_path, right_path) +1# Example usage:
root = TreeNode(3)
root.left = TreeNode(9)
root.right = TreeNode(20)
root.right.left = TreeNode(15)
root.right.right = TreeNode(7)

print(longestPath(root)) # Output:4


####7. 二叉树的最小值**问题描述**:给定一棵二叉树,求出其最小值。

**解决方案**:

class TreeNode:
 def __init__(self, x):
 self.val = x self.left = None self.right = Nonedef minVal(root):
 """
 :type root: TreeNode :rtype: int """
 if not root:
 return float('inf')
 else:
 left_val = minVal(root.left)
 right_val = minVal(root.right)
 return min(left_val, right_val)

# Example usage:
root = TreeNode(3)
root.left = TreeNode(9)
root.right = TreeNode(20)
root.right.left = TreeNode(15)
root.right.right = TreeNode(7)

print(minVal(root)) # Output:3


####8. 二叉树的最大值**问题描述**:给定一棵二叉树,求出其最大值。

**解决方案**:

class TreeNode:
 def __init__(self, x):
 self.val = x self.left = None self.right = Nonedef maxVal(root):
 """
 :type root: TreeNode :rtype: int """
 if not root:
 return float('-inf')
 else:
 left_val = maxVal(root.left)
 right_val = maxVal(root.right)
 return max(left_val, right_val)

# Example usage:
root = TreeNode(3)
root.left = TreeNode(9)
root.right = TreeNode(20)
root.right.left = TreeNode(15)
root.right.right = TreeNode(7)

print(maxVal(root)) # Output:20


####9. 二叉树的中序遍历(递归)

**问题描述**:给定一棵二叉树,输出其中序遍历结果。

**解决方案**:

class TreeNode:
 def __init__(self, x):
 self.val = x self.left = None self.right = Nonedef inorderTraversal(root):
 """
 :type root:

相关标签:
其他信息

其他资源

Top