LeetCode-(94,144,145).二叉树的前中后续遍历
创始人
2024-05-24 03:06:40
0

目录

    • 二叉树的前序遍历
    • 二叉树的中序遍历
    • 二叉树的后序遍历

二叉树的前序遍历

递归
在这里插入图片描述

class Solution {public List preorderTraversal(TreeNode root) {List list = new ArrayList<>();dfs(root,list);return list;}public static void dfs(TreeNode root,List list){if(root == null){return;}//中  左  右list.add(root.val);dfs(root.left,list);dfs(root.right,list);}
}

在这里插入图片描述
迭代
我们使用栈来进行迭代,过程如下:

  • 初始化栈,并将根节点入栈;
  • 当栈不为空时:
    • 弹出栈顶元素 node,并将值添加到结果中;
    • 如果 node 的右子树非空,将右子树入栈;
    • 如果 node 的左子树非空,将左子树入栈;

由于栈是“先进后出”的顺序,所以入栈时先将右子树入栈,这样使得前序遍历结果为 “根->左->右”的顺序。
在这里插入图片描述

// 前序遍历顺序:中-左-右,入栈顺序:中-右-左
class Solution {public List preorderTraversal(TreeNode root) {List list = new ArrayList<>();if(root == null){return list;}Stack stack = new Stack<>();stack.push(root);while(!stack.isEmpty()){TreeNode node = stack.pop();list.add(node.val);if(node.right != null){stack.push(node.right);}if(node.left != null){stack.push(node.left);}}return list;}
}

在这里插入图片描述

二叉树的中序遍历

递归
在这里插入图片描述

class Solution {public List inorderTraversal(TreeNode root) {List list = new ArrayList<>();dfs(root,list);return list;}public static void dfs(TreeNode root,List list){if(root == null){return;}//左  中  右dfs(root.left,list);list.add(root.val);dfs(root.right,list);}
}

在这里插入图片描述
迭代
会先递归节点A,再递归B,再递归D,一个个压入递归栈。
在这里插入图片描述
中序遍历,在栈顶节点的右子节点压栈之前,要处理出栈节点的节点值,将它输出。
在这里插入图片描述
新入栈的右子节点(右子树),就是在递归它。和节点A、B、D的压栈一样,它们都是子树。
不同的子树要做同样的事情,一样要先将它的左子节点不断压栈,然后再出栈,带出右子节点入栈。
在这里插入图片描述
代码实现

// 中序遍历顺序: 左-中-右 入栈顺序: 左-右
class Solution {public List inorderTraversal(TreeNode root) {List result = new ArrayList<>();if (root == null){return result;}Stack stack = new Stack<>();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;}
}

在这里插入图片描述

二叉树的后序遍历

递归
在这里插入图片描述

class Solution {public List postorderTraversal(TreeNode root) {List list = new ArrayList<>();dfs(root,list);return list;}public static void dfs(TreeNode root,List list){if(root == null){return;}//左  右   中dfs(root.left,list);dfs(root.right,list);list.add(root.val);}
}

在这里插入图片描述

迭代
根据前序遍历改
前序遍历中左右—>中右左—>左右中(翻转)

class Solution {public List postorderTraversal(TreeNode root) {List list = new ArrayList<>();if(root == null){return list;}Stack stack = new Stack<>();stack.push(root);while(!stack.isEmpty()){TreeNode node = stack.pop();list.add(node.val);if(node.left != null){stack.push(node.left);}if(node.right != null){stack.push(node.right);}}Collections.reverse(list);return list;}
}

在这里插入图片描述

上一篇:隐私计算概览

下一篇:react-jwchat

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...