leetcode144,94,145
二叉树的前中后序遍历
递归方式:
1:确定递归函数的参数和返回值
2:确定终止条件
3:确定单层递归的逻辑
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<Integer>();
preorder(root, result);
return result;
}
public void preorder(TreeNode root, List<Integer> result) {//确定返回值
if (root == null) { //确定终止条件
return;
}
result.add(root.val); //前序遍历
preorder(root.left, result);
preorder(root.right, result);
}
}
二叉树的非递归前中后序遍历(迭代法)
class Solution { //前序遍历 进栈顺序:中左右
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> result=new ArrayList<Integer>();
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;
}
}
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> result=new ArrayList<Integer>();
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.left!=null){
stack.push(node.left);//后续遍历只需要 调整一下 中左右,然后直接反转数组就可以得到后序遍历
}
if(node.right!=null){
stack.push(node.right);
}
}
Collections.reverse(result);
return result;
}
}
中序遍历的迭代法
前面的前序遍历,要处理的元素和遍历(遍历是先根再左或者右)的元素是一致的,所以可以同步处理,但是中序遍历却做不到,
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> result=new ArrayList<Integer>();
Stack<TreeNode> stack=new Stack<>();
if(root==null){
return result;
}
TreeNode cur=root;
while(cur!=null||!stack.isEmpty()){
if(cur!=null){
stack.push(cur); //左子树一直遍历到底,栈依次存入便利的节点。然后弹出每个节点(弹出的顺序是先子节点再父节点),弹出的节点存入数组中,
cur=cur.left;
}else{
cur=stack.pop(); //遍历到底后,弹出栈(同时存入数组中),然后处理右节点
result.add(cur.val);
cur=cur.right;
}
}
return result;
}
}
对于前中后序遍历使用递归法 我们可以统一写法,迭代法也可以统一写法。
迭代法中序遍历不能统一是因为处理和遍历方式不一致,解决这个问题
posted on 2022-10-04 22:35 你是千堆雪我是长街7 阅读(5) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具