PS:以下代码均为C++实现
1.二叉树前序遍历 力扣
给你二叉树的根节点
root
,返回它节点值的 前序 遍历。
class Solution {
public:vector<int> preorderTraversal(TreeNode* root) {stack<TreeNode*> st;vector<int> str;TreeNode* cur=root;while(cur||!st.empty())//cur为空或者st为空两者都为空则退出{while(cur){str.push_back(cur->val);//遍历左子树st.push(cur);cur=cur->left;}cur=st.top();st.pop();cur=cur->right;//遍历右子树}return str;}
};
2.二叉树中序遍历 力扣
给定一个二叉树的根节点
root
,返回 它的 中序 遍历 。
//中序遍历和前序遍历差不多
class Solution {
public:vector<int> inorderTraversal(TreeNode* root) {stack<TreeNode*> st;vector<int> str;TreeNode* cur=root;while(cur||!st.empty()){while(cur){st.push(cur);cur=cur->left;}cur=st.top();str.push_back(cur->val);st.pop();cur=cur->right;}return str;}
};
3.二叉树的后序遍历 力扣
给你一棵二叉树的根节点
root
,返回其节点值的 后序遍历 。
后序遍历和中序遍历差不多,中间多了一步判断的步骤,只需设置一个空指针,然后判断是否左节点是否为空,不为空则先遍历右节点,空指针的目的是为了防止重复遍历。
class Solution {
public:vector<int> postorderTraversal(TreeNode* root) {stack<TreeNode*> st;vector<int> nums;TreeNode* cur=root;TreeNode* prev=nullptr;while(cur||!st.empty()){while(cur){st.push(cur);cur=cur->left;}TreeNode* top=st.top();if(top->right==nullptr||top->right==prev)//防止重复遍历{prev=top;st.pop();nums.push_back(top->val);}else{cur=top->right;}}return nums;}
};