二叉树

简介: 二叉树“【5月更文挑战第22天】”

二叉树是一种特殊的树形数据结构,其中每个节点最多有两个子节点,通常被称为左子节点和右子节点。遍历二叉树是指按照某种顺序访问树中的所有节点,而前序遍历是其中的一种遍历方式。

前序遍历的定义

在前序遍历中,我们首先访问根节点,然后递归地对左子树进行前序遍历,最后递归地对右子树进行前序遍历。这种遍历方式的顺序可以概括为:根节点 -> 左子树 -> 右子树。

递归实现的步骤

  1. 访问根节点:首先打印或访问当前节点的值。
  2. 遍历左子树:然后对左子节点递归执行前序遍历。
  3. 遍历右子树:最后对右子节点递归执行前序遍历。

递归实现的伪代码

function 前序遍历(node)
    if node is not null then
        访问 node 的数据
        前序遍历(node.left)
        前序遍历(node.right)
    end if
end function

递归实现的示例代码(以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) {
   
        // 访问根节点
        cout << root->val << " ";
        // 遍历左子树
        preOrderTraversal(root->left);
        // 遍历右子树
        preOrderTraversal(root->right);
    }
}

// 测试代码
int main() {
   
    // 创建一个示例二叉树
    //       1
    //      / \
    //     2   3
    //    / \
    //   4   5
    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);

    // 执行前序遍历
    preOrderTraversal(root);

    return 0;
}

注意事项

  • 在递归实现中,确保对每个节点的访问都是唯一的,避免重复访问。
  • 递归实现的前序遍历需要维护一个栈来存储待访问的节点,这个栈由递归调用的调用栈隐式实现。
  • 递归实现的前序遍历在最坏情况下的时间复杂度为O(n),其中n是二叉树中节点的数量,因为每个节点都会被访问一次。
目录
相关文章
|
机器学习/深度学习 存储 算法
深入理解【二叉树】
深入理解【二叉树】
81 0
|
2月前
|
算法
22_最大二叉树
22_最大二叉树
|
5月前
|
Java
二叉树
二叉树
23 0
二叉树的讲解
1.若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有2^(i-1) 个结点. 2. 若规定根节点的层数为1,则深度为h的二叉树的最大结点数是 2^h-1. 3. 对任何一棵二叉树, 如果度为0其叶结点个数为n0 , 度为2的分支结点个数为02 ,则有n0 =n2 +1 4. 若规定根节点的层数为1,具有n个结点的满二叉树的深度,h= . (ps: 是log以2为底,n+1为对数) 5. 对于具有n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从0开始编号,则对于序号为i的结点有:
二叉树的讲解
二叉树(详解)下
二叉树(详解)
60 0
|
6月前
|
存储 数据库管理
【二叉树】
【二叉树】
49 0
|
6月前
|
存储 Java C++
二叉树的实现(上)
二叉树的实现
68 0
24 二叉树
24 二叉树
50 0
|
存储
二叉树讲解
二叉树讲解
72 0
|
存储 机器学习/深度学习 算法
二叉树(详解)上
二叉树(详解)
66 0