概述
这次首先总结二叉树的前序、中序、后序、层次遍历的递归与非递归实现。
下次总结二叉树的查找、求二叉树的深度、统计节点个数与节点比较的递归实现。
二叉树的结构定义为:
1 | //Definition for a binary tree node. |
前序遍历
前序遍历的递归实现,中序遍历、后序遍历的递归实现同理:
1 | public void preOrder(TreeNode t) { |
前序遍历的非递归实现:
1 | public void preOrder(TreeNode t) { |
中序遍历
中序遍历的递归实现,同理:
1 | public void medOrder(TreeNode t) { |
中序遍历的非递归实现,与前序遍历不同的就是在找最左端节点时不输出当前节点:
1 | public void medOrder(TreeNode t) { |
后序遍历
后序遍历的递归实现,同理:
1 | public void postOrder(TreeNode t) { |
后序遍历的非递归实现,需要注意的是得先访问父节点的两个子节点之后才能访问父节点,需要使用一个last节点来记录上一次访问的节点,判断是否是当前节点的右子节点,若是,则说明当前左右子树均已访问,则输出当前节点,否则访问其右子树:
1 | public static void postOrder(TreeNode root) { |