数据结构与C++ 知识量:9 - 32 - 91
遍历二叉树的方法有多种,其中常用的有先序遍历、中序遍历和后序遍历。
先序遍历:先访问根节点,然后递归地先序遍历左子树,最后递归地先序遍历右子树。
中序遍历:先递归地中序遍历左子树,然后访问根节点,最后递归地中序遍历右子树。
后序遍历:先递归地后序遍历左子树,然后递归地后序遍历右子树,最后访问根节点。
先序遍历二叉树的顺序是“根-左-右”。以下是使用C++语言实现先序遍历二叉树的示例代码:
#include <iostream> using namespace std; // 定义二叉树节点结构体 struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; // 先序遍历二叉树函数 void preorderTraversal(TreeNode* root) { if (root == NULL) { // 如果节点为空,直接返回 return; } cout << root->val << " "; // 输出当前节点的值 preorderTraversal(root->left); // 递归遍历左子树 preorderTraversal(root->right); // 递归遍历右子树 } 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 << "先序遍历结果:"; preorderTraversal(root); cout << endl; return 0; }
在这个示例中,定义了一个 TreeNode 结构体表示二叉树的节点,包含数据元素 val 和左右子节点的指针 left、right。preorderTraversal 函数用于实现先序遍历二叉树,如果当前节点为空,直接返回;否则输出当前节点的值,递归遍历左子树和右子树。在 main 函数中,构建了一个二叉树,并调用 preorderTraversal 函数进行先序遍历,并输出结果。
中序遍历二叉树的顺序是“左-根-右”。以下是使用C++语言实现中序遍历二叉树的示例代码:
#include <iostream> using namespace std; // 定义二叉树节点结构体 struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; // 中序遍历二叉树函数 void inorderTraversal(TreeNode* root) { if (root == NULL) { // 如果节点为空,直接返回 return; } inorderTraversal(root->left); // 递归遍历左子树 cout << root->val << " "; // 输出当前节点的值 inorderTraversal(root->right); // 递归遍历右子树 } 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 << "中序遍历结果:"; inorderTraversal(root); cout << endl; return 0; }
在这个示例中,定义了一个 TreeNode 结构体表示二叉树的节点,包含数据元素 val 和左右子节点的指针 left、right。inorderTraversal 函数用于实现中序遍历二叉树,如果当前节点为空,直接返回;否则递归遍历左子树,输出当前节点的值,递归遍历右子树。在 main 函数中,构建了一个二叉树,并调用 inorderTraversal 函数进行中序遍历,并输出结果。
后序遍历二叉树的顺序是“左-右-根”。以下是使用C++语言实现后序遍历二叉树的示例代码:
#include <iostream> using namespace std; // 定义二叉树节点结构体 struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; // 中序遍历二叉树函数 void inorderTraversal(TreeNode* root) { if (root == NULL) { // 如果节点为空,直接返回 return; } inorderTraversal(root->left); // 递归遍历左子树 cout << root->val << " "; // 输出当前节点的值 inorderTraversal(root->right); // 递归遍历右子树 } 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 << "中序遍历结果:"; inorderTraversal(root); cout << endl; return 0; }
在这个示例中,定义了一个 TreeNode 结构体表示二叉树的节点,包含数据元素 val 和左右子节点的指针 left、right。postorderTraversal 函数用于实现后序遍历二叉树,如果当前节点为空,直接返回;否则递归遍历左子树和右子树,最后输出当前节点的值。在 main 函数中,构建了一个二叉树,并调用 postorderTraversal 函数进行后序遍历,并输出结果。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6