赞
踩
深度优先遍历算法的核心思想是通过递归或栈来实现,它遵循以下步骤:
在二叉树中,常见的深度优先遍历方式有三种:
#include <iostream> #include <stack> using namespace std; // 定义二叉树节点结构体 struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} }; // 前序遍历(递归版本) void preorderTraversal(TreeNode* root) { if (root) { cout << root->val << " "; preorderTraversal(root->left); preorderTraversal(root->right); } } // 中序遍历(递归版本) void inorderTraversal(TreeNode* root) { if (root) { inorderTraversal(root->left); cout << root->val << " "; inorderTraversal(root->right); } } // 后序遍历(递归版本) void postorderTraversal(TreeNode* root) { if (root) { postorderTraversal(root->left); postorderTraversal(root->right); cout << root->val << " "; } } 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); cout << "前序遍历:"; preorderTraversal(root); cout << endl; cout << "中序遍历:"; inorderTraversal(root); cout << endl; cout << "后序遍历:"; postorderTraversal(root); cout << endl; // 释放内存 delete root->left->left; delete root->left->right; delete root->left; delete root->right; delete root; return 0; }
应用:
class Solution {
public:
bool evaluateTree(TreeNode* root) {
// 判断是否为叶子节点
if (root->left == nullptr) return root->val == 0 ? false : true;
//dfs
bool left = evaluateTree(root->left);
bool right = evaluateTree(root->right);
return root->val == 2 ? left | right : left & right;
}
};
深度优先遍历是一种重要的遍历算法,对于理解树和图的结构及其应用具有重要意义。通过掌握深度优先遍历的原理和常见实现方式,能够更加深入地理解算法的本质,并能够应用于解决各种相关问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。