«preorderTraversal» — это термин, широко используемый в информатике и относящийся к методу обхода древовидной структуры данных. Это алгоритм поиска в глубину, который посещает узлы в следующем порядке: корень, левое поддерево, правое поддерево. Вот несколько методов реализации обхода предварительного заказа на разных языках программирования:
-
Python:
class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def preorderTraversal(root): if root is None: return [] stack = [root] result = [] while stack: node = stack.pop() result.append(node.val) if node.right: stack.append(node.right) if node.left: stack.append(node.left) return result -
Java:
class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int val) { this.val = val; } } public List<Integer> preorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<>(); if (root == null) { return result; } Stack<TreeNode> stack = new Stack<>(); stack.push(root); while (!stack.isEmpty()) { TreeNode node = stack.pop(); result.add(node.val); if (node.right != null) { stack.push(node.right); } if (node.left != null) { stack.push(node.left); } } return result; } -
C++:
#include <iostream> #include <stack> using namespace std; struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int val) { this->val = val; left = nullptr; right = nullptr; } }; vector<int> preorderTraversal(TreeNode* root) { vector<int> result; if (root == nullptr) { return result; } stack<TreeNode*> stack; stack.push(root); while (!stack.empty()) { TreeNode* node = stack.top(); stack.pop(); result.push_back(node->val); if (node->right != nullptr) { stack.push(node->right); } if (node->left != nullptr) { stack.push(node->left); } } return result; }