当前位置: 首页 > news >正文

二叉树系列主题Code

Python实现二叉树遍历

# 定义二叉树节点类  
class TreeNode:  def __init__(self, val=0, left=None, right=None):  self.val = val  self.left = left  self.right = right  # 前序遍历(非递归)  
def preorderTraversal(root):  if not root:  return []  stack, output = [root], []  while stack:  node = stack.pop()  if node:  output.append(node.val)  if node.right:  stack.append(node.right)  if node.left:  stack.append(node.left)  return output  # 中序遍历(非递归)  
def inorderTraversal(root):  stack, output, current = [], [], root  while True:  while current:  stack.append(current)  current = current.left  if not stack:  return output  current = stack.pop()  output.append(current.val)  current = current.right  # 后序遍历(非递归)  
def postorderTraversal(root):  if not root:  return []  stack1, stack2, output = [root], [], []  while stack1:  node = stack1.pop()  if node:  stack2.append(node)  if node.left:  stack1.append(node.left)  if node.right:  stack1.append(node.right)  while stack2:  node = stack2.pop()  output.append(node.val)  return output[::-1]  # 逆序输出,得到后序遍历结果  # 层次遍历(非递归)  
def levelOrderTraversal(root):  if not root:  return []  from collections import deque  queue, output = deque([root]), []  while queue:  level_size = len(queue)  current_level = []  for _ in range(level_size):  node = queue.popleft()  # 弹出队列左侧元素  current_level.append(node.val)  if node.left:  queue.append(node.left)  # 左孩子入队  if node.right:  queue.append(node.right)  # 右孩子入队  output.append(current_level)  return output

cpp实现二叉树遍历

#include <iostream>  
#include <stack>  
#include <queue>
using namespace std;  // 二叉树节点定义  
struct TreeNode {  int val;  TreeNode* left;  TreeNode* right;  TreeNode(int x) : val(x), left(NULL), right(NULL) {}  
};  // 前序遍历(递归实现)  
void preorderTraversalRecursive(TreeNode* root) {  if (root == NULL) {  return;  }  cout << root->val << " ";  preorderTraversalRecursive(root->left);  preorderTraversalRecursive(root->right);  
}  // 前序遍历(迭代实现)  
void preorderTraversalIterative(TreeNode* root) {  if (root == NULL) {  return;  }  stack<TreeNode*> stk;  stk.push(root);  while (!stk.empty()) {  TreeNode* node = stk.top();  stk.pop();  cout << node->val << " ";  if (node->right != NULL) {  stk.push(node->right);  }  if (node->left != NULL) {  stk.push(node->left);  }  }  
}  // 中序遍历(递归实现)  
void inorderTraversalRecursive(TreeNode* root) {  if (root == NULL) {  return;  }  inorderTraversalRecursive(root->left);  cout << root->val << " ";  inorderTraversalRecursive(root->right);  
}  // 中序遍历(迭代实现)  
void inorderTraversalIterative(TreeNode* root) {  if (root == NULL) {  return;  }  stack<TreeNode*> stk;  TreeNode* curr = root;  while (curr != NULL || !stk.empty()) {  while (curr != NULL) {  stk.push(curr);  curr = curr->left;  }  curr = stk.top();  stk.pop();  cout << curr->val << " ";  curr = curr->right;  }  
}  // 后序遍历(递归实现)  
void postorderTraversalRecursive(TreeNode* root) {  if (root == NULL) {  return;  }  postorderTraversalRecursive(root->left);  postorderTraversalRecursive(root->right);  cout << root->val << " ";  
}  // 后序遍历(迭代实现)  
void postorderTraversalIterative(TreeNode* root) {  if (root == NULL) {  return;  }  stack<TreeNode*> stk1, stk2;  stk1.push(root);  while (!stk1.empty()) {  TreeNode* node = stk1.top();  stk1.pop();  stk2.push(node);  if (node->left != NULL) {  stk1.push(node->left);  }  if (node->right != NULL) {  stk1.push(node->right);  }  }  while (!stk2.empty()) {  cout << stk2.top()->val << " ";  stk2.pop();  }  
}  // 层次遍历  
void levelOrderTraversal(TreeNode* root) {  if (root == NULL) {  return;  }  queue<TreeNode*> q;  q.push(root);  while (!q.empty()) {  int levelSize = q.size();  for (int i = 0; i < levelSize; i++) {  TreeNode* node = q.front();  q.pop();  cout << node->val << " ";  if (node->left != NULL) {  q.push(node->left);  }  if (node->right != NULL) {  q.push(node->right);  }  }  cout << endl; // 每一层遍历完后换行  }  int main() {  // 创建二叉树  TreeNode* root = new TreeNode(1);  root->left = new TreeNode(2);  root->right = new TreeNode(3);  root->left->left = new TreeNode(4);  root->left->right = new TreeNode(5);  root->right->left = new TreeNode(6);  root->right->right = new TreeNode(7);  cout << "前序遍历(递归实现): ";  preorderTraversalRecursive(root); cout << endl; // 输出:1 2 4 5 3 6 7
}

水平有限,有问题随时联系~

http://www.lryc.cn/news/216091.html

相关文章:

  • Leetcode 673. 最长递增子序列的个数 C++
  • html用css grid实现自适应四宫格放视频
  • 【机器学习可解释性】5.SHAP值的高级使用
  • CentOS开机自动运行jar程序实现
  • matlab双目标定中基线物理长度获取
  • 自己动手实现一个深度学习算法——二、神经网络的实现
  • gRPC源码剖析-Builder模式
  • ARM传输数据以及移位操作
  • 06、如何将对象数组里 obj 的 key 值变成动态的(即:每一个对象对应的 key 值都不同)
  • ngx_http_request_s
  • Docker 学习路线 2:底层技术
  • UEFI实战——显示图片
  • Ansible中的playbook
  • 怎样去除视频中的杂音,保留人声部分?
  • 基于Qt QTreeView|QTreeWidget控件使用简单版
  • edge浏览器的隐藏功能
  • 安卓抓包之小黄鸟
  • Django中的FBV和CBV
  • 信息泄露--
  • C#WPF文本格式化模式实例
  • 嵌入式云平台一些基础概念的理解
  • 【项目管理】生命周期风险评估
  • 力扣 搜索旋转排序数组 二分
  • 【软件测试】个人博客项目测试报告
  • Express框架开发接口之今日推荐等模块
  • UTONMOS:元宇宙顺势而上,重构数字化发展新形态
  • 【Nginx37】Nginx学习:SSL模块(一)简单配置与指令介绍
  • CompletableFuture 异步调用,获取返回值
  • excel利用正则匹配和替换指定内容
  • IPv4首部格式