一,二叉树的定义
二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者空集(称为空二叉树),或者由一个根节点和两颗互不相交的,分别称为根节点的左子树和右子树的二叉树组成,是有序树。
class TreeNode{
public char val;
public TreeNode left;
public TreeNode right;
public TreeNode(char val) {
this.val = val;
}
}
分为left结点和right结点
列举一个二叉树,图如下:
二,二叉树的遍历
二叉树的遍历有“前序遍历”、“中序遍历”、“后序遍历”
1.前序遍历:前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。
2.中序遍历:中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。
3.后序遍历:先左后右再根,即首先遍历左子树,然后遍历右子树,最后访问根结点。
由上图得出的遍历顺序结果:
前序(preOrder): A B D E H C F G
中序(inOrder): D B E H A F C G
后序(postOrder): D H E B F G C A
三,代码(递归实现)
1.前序遍历
//前序遍历;
void preOrder(TreeNode root) {
if(root == null) {
return;
}
System.out.print(root.val + " ");
preOrder(root.left);
preOrder(root.right);
}
2.中序遍历
//中序遍历;
void inOrder(TreeNode root) {
if(root == null) {
return;
}
inOrder(root.left);
System.out.print(root.val + " ");
inOrder(root.right);
}
3.后续遍历
//后序遍历;
void postOrder(TreeNode root) {
if(root == null) {
return;
}
postOrder(root.left);
postOrder(root.right);
System.out.print(root.val + " ");
}