后续遍历(Postorder traversal)是二叉树的一种遍历方式,它的遍历顺序是先访问左子树,再访问右子树,最后访问根节点。下面是使用C++描述后续遍历的代码示例:
#include <iostream>
using namespace std;
// 二叉树节点的结构体
struct Node {
int val;
Node* left;
Node* right;
Node(int v) : val(v), left(NULL), right(NULL) {}
};
// 后续遍历函数
void postorderTraversal(Node* root) {
if (root == NULL) {
return;
}
postorderTraversal(root->left); // 遍历左子树
postorderTraversal(root->right); // 遍历右子树
cout << root->val << " "; // 访问根节点
}
// 测试代码
int main() {
// 构造一棵二叉树
Node* root = new Node(1);
root->left = new Node(2);
root->right = new Node(3);
root->left->left = new Node(4);
root->left->right = new Node(5);
root->right->left = new Node(6);
root->right->right = new Node(7);
// 后续遍历二叉树
cout << "后续遍历结果:";
postorderTraversal(root);
cout << endl;
return 0;
}
在上面的代码中,postorderTraversal
函数接收一个指向二叉树根节点的指针,遍历左子树、右子树和根节点的顺序符合后序遍历的要求。在函数中,当指针为空时,直接返回;否则,先遍历左子树,再遍历右子树,最后访问根节点并输出。在 main
函数中,我们构造了一棵二叉树,并调用 postorderTraversal
函数进行后序遍历,输出遍历结果。
特别提醒不熟悉c++语法的朋友
Node(int v) : val(v), left(NULL), right(NULL) {}
这段代码是 C++ 中结构体的构造函数定义。在这里,Node(int v)
表示定义了一个参数为 v
的构造函数,用于创建一个新的 Node
节点。构造函数的作用是初始化结构体的成员变量。
在这个构造函数中,通过初始化列表的方式,给节点的 val
赋值为 v
,同时将左子树和右子树的指针初始化为 NULL(空指针)。这个构造函数的主要作用是让我们方便地创建新的 Node
节点,并将节点的值和左右子树指针初始化为默认值。
在实际的代码中,我们可以通过调用这个构造函数来创建一个新的 Node
节点,例如:
Node* node = new Node(10);
这个语句创建了一个新的 Node
节点,它的值为 10
,左右子树指针都被初始化为 NULL。