class Solution {
// 前序遍历根左右
public List preorderTraversal(TreeNode root) {
List list = new ArrayList<>();
Stack stack = new Stack<>();
TreeNode p = root;
while (p != null || !stack.isEmpty()) {
while (p != null) {
list.add(p.val);
stack.push(p);
p = p.left;
}
p = stack.pop();
if (p.right != null) {
p = p.right;
} else {
p = null;
}
}
return list;
}
}
class Solution {
//中序遍历左根右
public List inorderTraversal(TreeNode root) {
List list = new ArrayList<>();
Stack stack = new Stack<>();
TreeNode p = root;
while (p != null || !stack.isEmpty()) {
if (p != null) {
stack.push(p);
p = p.left;
} else {
p = stack.pop();
list.add(p.val);
if (p.right != null) {
p = p.right;
} else {
p = null;
}
}
}
return list;
}
}
class Solution {
//后序遍历左右根
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
TreeNode p = root, q = null;
while (p != null || !stack.isEmpty()) {
if (p != null) {
stack.push(p);
p = p.left;
} else {
p = stack.pop();
if (p.right == null || p.right == q) {
list.add(p.val);
q = p;
p = null;
} else {
stack.push(p);
p = p.right;
}
}
}
return list;
}
}
共以下 7 个回答
前序遍历: &res) {
// 递归遍历
void preorder(TreeNode* root, vector
if (root nullptr) return;
res.emplace_back(root->val);
preorder(root->left, res);
preorder(root->right, res);
}
中序遍历: &res){
// 递归遍历
void inorder(TreeNode* root, vector
if (root nullptr) return;
inorder(root->left, res);
res.emplace_back(root->val);
inorder(root->right, res);
}
后序遍历: &res){ postorderTraversal(TreeNode root) { res; > levelOrder(TreeNode* root) { > res; // 存放树的层序遍历数组 cur; // 表示当前层数的节点
// 递归
void postorder(TreeNode root, vector
if (root nullptr) return;
postorder(root->left, res);
postorder(root->right, res);
res.emplace_back(root->val);
}
vector
vector
postorder(root, res);
return res;
}
层序遍历:
// 迭代,采用队列来存节点
vector<vector
vector<vector
if (root nullptr) return res;
queue<TreeNode*> que; // 使用队列来辅助存储树节点
que.emplace(root);
while (!que.empty()) {
int size = que.size(); // 获得当前层数的节点个数
vector
for (int i = 1; i <= size; ++i) {
auto node = que.front();
que.pop();
cur.emplace_back(node->val);
if (node->left) que.emplace(node->left);
if (node->right) que.emplace(node->right);
}
res.emplace_back(cur); // 把当前层的节点数组加入到总的结果数组中
}
return res;
}
1、先序遍历
2、中序遍历
3、后序遍历
前序遍历
中序遍历
后续遍历