c++二叉树怎么建立与遍历

   2025-02-13 3150
核心提示:建立二叉树:可以使用递归或者迭代的方式来建立二叉树。递归方式建立二叉树:创建一个二叉树节点结构,包含一个值和指向左右子节

建立二叉树:可以使用递归或者迭代的方式来建立二叉树。

递归方式建立二叉树:

创建一个二叉树节点结构,包含一个值和指向左右子节点的指针。使用递归的方式,先建立左子树,再建立右子树。根据具体需求,确定递归的终止条件。

示例代码如下:

struct TreeNode {    int val;    TreeNode* left;    TreeNode* right;    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}};TreeNode* buildTree(vector<int>& nums, int start, int end) {    if (start > end) {        return nullptr;    }        int mid = start + (end - start) / 2;    TreeNode* root = new TreeNode(nums[mid]);    root->left = buildTree(nums, start, mid - 1);    root->right = buildTree(nums, mid + 1, end);        return root;}TreeNode* buildBinaryTree(vector<int>& nums) {    return buildTree(nums, 0, nums.size() - 1);}

迭代方式建立二叉树:

创建一个二叉树节点结构,包含一个值和指向左右子节点的指针。使用一个队列来辅助建立二叉树。从根节点开始,依次将左右子节点入队列。根据具体需求,确定迭代的终止条件。

示例代码如下:

struct TreeNode {    int val;    TreeNode* left;    TreeNode* right;    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}};TreeNode* buildBinaryTree(vector<int>& nums) {    if (nums.empty()) {        return nullptr;    }        TreeNode* root = new TreeNode(nums[0]);    queue<TreeNode*> q;    q.push(root);        int i = 1;    while (i < nums.size()) {        TreeNode* node = q.front();        q.pop();                if (i < nums.size() && nums[i] != -1) {            node->left = new TreeNode(nums[i]);            q.push(node->left);        }                i++;                if (i < nums.size() && nums[i] != -1) {            node->right = new TreeNode(nums[i]);            q.push(node->right);        }                i++;    }        return root;}

遍历二叉树:常见的二叉树遍历方式有前序遍历、中序遍历和后序遍历。

前序遍历(根左右):

访问根节点。递归地前序遍历左子树。递归地前序遍历右子树。

示例代码如下:

void preorderTraversal(TreeNode* root) {    if (root == nullptr) {        return;    }        // 访问根节点    cout << root->val << " ";        // 前序遍历左子树    preorderTraversal(root->left);        // 前序遍历右子树    preorderTraversal(root->right);}

中序遍历(左根右):

递归地中序遍历左子树。访问根节点。递归地中序遍历右子树。

示例代码如下:

void inorderTraversal(TreeNode* root) {    if (root == nullptr) {        return;    }        // 中序遍历左子树    inorderTraversal(root->left);        // 访问根节点    cout << root->val << " ";        // 中序遍历右子树    inorderTraversal(root->right);}

后序遍历(左右根):

递归地后序遍历左子树。递归地后序遍历右子树。访问根节点。

示例代码如下:

void postorderTraversal(TreeNode* root) {    if (root == nullptr) {        return;

 
 
更多>同类维修知识
推荐图文
推荐维修知识
点击排行
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  网站留言