实现二叉树前序、中序和后序遍历:
题目:
实现二叉树前序、中序和后序遍历
提示:使用递归实现
示例:
示例:
输入:
/* 1
2 3
4 5 6
*/
前序输出:1 2 4 3 5 6
中序输出:4 2 1 5 3 6
后序输出:4 2 5 6 3 1
分析:
这道题其实不完全算是算法,其实就是二叉树的三种遍历方法:
前序遍历:若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树。(根----->左------->右)
中序遍历:若二叉树为空,则空操作返回,否则从根结点开始(注意并不是先访问根结点),中序遍历根结点的左子树,然后访问根结点,最后遍历右子树。(左----->根------->右)
后序遍历:若二叉树为空,则空操作返回,否则从左到右先叶子结点后结点的方式遍历访问左右子树,最后访问根结点。(左------>右------>根)
所以,这道题只是练习如何使用代码来实现前中后序遍历。
这里,先简单把二叉树建立出来:
public class TreeNode {
int val;//节点值
TreeNode left;//左子树地址
TreeNode right;//右子树地址
TreeNode( int x){
val = x;//节点存放的数值
}
}
建立与示例一样的树:
/* 1
2 3
4 5 6
*/
TreeNode treeNode = new TreeNode(1);
treeNode.left = new TreeNode(2);
treeNode.left.left = new TreeNode(4);
treeNode.right = new TreeNode(3);
treeNode.right.left = new TreeNode(5);
treeNode.right.right = new TreeNode(6);
然后就是将二叉树进行遍历,记住前中后序遍历的要求即可(高亮标出来了)
代码:
先看上面的分析!自己理解思考一下,不要急着看代码!
前序遍历:
/**
* 二叉树前序遍历 根-> 左-> 右
* @param node 二叉树节点
*/
public void preOrderTraversal(TreeNode node) {
if (node == null){
return;
}
System.out.print(node.val + " ");//根输出
preOrderTraversal(node.left);//左子树
preOrderTraversal(node.right);//右子树
}
中序遍历:
/**
* 二叉树中序遍历 左-> 根-> 右
* @param node 二叉树节点
*/
public void inOrderTraveral(TreeNode node){
if(node == null){
return;
}
inOrderTraveral(node.left);//左子树
System.out.print(node.val + " ");//根输出
inOrderTraveral(node.right);//右子树
}
后序遍历:
/**
* 二叉树后序遍历 左-> 右-> 根
* @param node 二叉树节点
*/
public void postOrderTraveral(TreeNode node){
if(node == null){
return;
}
postOrderTraveral(node.left);
postOrderTraveral(node.right);
System.out.print(node.val + " ");
}