首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在c++中遍历通用树

在C++中遍历通用树的方法有多种,以下是其中几种常用的方法:

  1. 递归遍历: 递归是一种简单直观的遍历通用树的方法。通过递归函数,可以依次访问树的每个节点,并对其进行相应的操作。递归遍历通用树的常用方法有前序遍历、中序遍历和后序遍历。
  • 前序遍历:先访问根节点,然后递归遍历左子树,最后递归遍历右子树。
  • 中序遍历:先递归遍历左子树,然后访问根节点,最后递归遍历右子树。
  • 后序遍历:先递归遍历左子树,然后递归遍历右子树,最后访问根节点。

以下是一个示例代码,展示了如何使用递归遍历通用树:

代码语言:cpp
复制
struct TreeNode {
    int val;
    vector<TreeNode*> children;
};

void traverse(TreeNode* root) {
    if (root == nullptr) {
        return;
    }
    
    // 前序遍历
    cout << root->val << " ";
    
    for (TreeNode* child : root->children) {
        traverse(child);
    }
    
    // 后序遍历
    // cout << root->val << " ";
}

int main() {
    // 构建通用树
    TreeNode* root = new TreeNode{1, {
        new TreeNode{2, {
            new TreeNode{5, {}},
            new TreeNode{6, {}}
        }},
        new TreeNode{3, {}},
        new TreeNode{4, {}}
    }};
    
    // 遍历通用树
    traverse(root);
    
    return 0;
}
  1. 迭代遍历: 除了递归遍历,还可以使用迭代的方式遍历通用树。迭代遍历通用树通常借助栈或队列来实现。
  • 层序遍历:使用队列实现,先将根节点入队,然后依次出队并访问节点,将其子节点入队,直到队列为空。
  • 其他遍历方式:使用栈实现,先将根节点入栈,然后循环出栈并访问节点,将其子节点入栈,直到栈为空。

以下是一个示例代码,展示了如何使用迭代遍历通用树:

代码语言:cpp
复制
struct TreeNode {
    int val;
    vector<TreeNode*> children;
};

void traverse(TreeNode* root) {
    if (root == nullptr) {
        return;
    }
    
    stack<TreeNode*> stk;
    stk.push(root);
    
    while (!stk.empty()) {
        TreeNode* node = stk.top();
        stk.pop();
        
        // 前序遍历
        cout << node->val << " ";
        
        // 将子节点逆序入栈
        for (int i = node->children.size() - 1; i >= 0; i--) {
            stk.push(node->children[i]);
        }
        
        // 后序遍历
        // cout << node->val << " ";
    }
}

int main() {
    // 构建通用树
    TreeNode* root = new TreeNode{1, {
        new TreeNode{2, {
            new TreeNode{5, {}},
            new TreeNode{6, {}}
        }},
        new TreeNode{3, {}},
        new TreeNode{4, {}}
    }};
    
    // 遍历通用树
    traverse(root);
    
    return 0;
}

以上是在C++中遍历通用树的两种常用方法。根据具体的需求和场景,选择递归遍历或迭代遍历的方式来实现对通用树的遍历操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

25分29秒

58-尚硅谷-Scala数据结构和算法-二叉树的前序中序后序遍历

1时36分

红黑树在linux中的3个经典用法,让你知其所以然

8分30秒

092-尚硅谷-图解Java数据结构和算法-前序中序后序遍历二叉树图解

8分30秒

092-尚硅谷-图解Java数据结构和算法-前序中序后序遍历二叉树图解

7分53秒

day22/上午/425-尚硅谷-尚融宝-创建通用dto以及在微服务中引入和配置RabbitMQ

13分2秒

C ++ Primer plus学习记录之路.1

12分53秒

C ++ Primer plus学习记录之路.2

14分20秒

C ++ Primer plus学习记录之路.3

4分31秒

52.在MyBatis配置文件中全局配置AddressTypeHandler.avi

12分42秒

广州巨控云组态WEBGUI-1/S/M/H学习视频

1分44秒

广州巨控GRM532YW实现CODESYS系列PLC远程下载调试

1分29秒

巨控GRM300数据网关西门子1500连接485仪表

领券