#include <iostream> #include <vector> #include <stack> struct BinaryTreeNode{ int val; BinaryTreeNode* left; BinaryTreeNode* right; BinaryTreeNode(int x) : val(x), left(nullptr), right(nullptr) {} }; //递归法 void traveral(BinaryTreeNode*cur, std::vector<int>&nums) { if (cur == nullptr) { std::cout << "cur is null" << std::endl; return; } else{ std::cout << "cur node: " << cur->val << ", "; nums.push_back(cur->val); std::cout << "traveral left" << ", "; traveral(cur->left, nums); std::cout << "traveral right" << ", "; traveral(cur->right, nums); } } std::vector<int> PreorderTraversalRecursion(BinaryTreeNode* root) { std::vector<int> result; traveral(root, result); return result; } //迭代法 std::vector<int> PreorderTraversalIterator(BinaryTreeNode* root) { std::stack<BinaryTreeNode*> st; std::vector<int> result; if (root == nullptr) { return result; } st.push(root);//root进栈 while (!st.empty()) { BinaryTreeNode* node = st.top();//根 st.pop();//弹出 result.push_back(node->val);//当前节点值 if (node->right) { st.push(node->right);//右节点 } if (node->left) { st.push(node->left);//左节点 } } return result; } int main() { BinaryTreeNode *nodeOne = new BinaryTreeNode(1); BinaryTreeNode *nodeTwo = new BinaryTreeNode(2); BinaryTreeNode*nodeThree = new BinaryTreeNode(3); BinaryTreeNode*nodeFour = new BinaryTreeNode(4); BinaryTreeNode*nodeFive = new BinaryTreeNode(5); BinaryTreeNode*nodeSix = new BinaryTreeNode(6); // 1 // 2 3 // 4 5 // 6 //1-2-4-5-6-3 nodeOne->left = nodeTwo; nodeOne->right = nodeThree; nodeTwo->left = nodeFour; nodeTwo->right = nodeFive; nodeFive->right = nodeSix; std::vector<int>resultsRecursion; resultsRecursion = PreorderTraversalRecursion(nodeOne); for (std::vector<int>::iterator it = resultsRecursion.begin(); it != resultsRecursion.end(); it++) { std::cout << (*it) << ", "; } std::cout << std::endl<< "-------------------------------------" << std::endl; std::vector<int>resultsIteration; resultsIteration = PreorderTraversalIterator(nodeOne); for (std::vector<int>::iterator it = resultsIteration.begin(); it != resultsIteration.end(); it++) { std::cout << (*it) << ", "; } }