学习二叉树必须首先掌握以下定义:
二叉树:由根节点和左右子树组成的树。左右子树的顺序不可颠倒,每个节点最多有两个子树。
叶子节点:度为0的树。
兄弟节点:两个节点有相同的父节点。
二叉树的遍历:
先序:先遍历根节点再遍历左右孩子。
中序:先遍历左孩子再遍历根节点再遍历右孩子。
后序:先遍历左右孩子,再遍历根节点。
实现:
定义二叉树的内部类TreeNode
public class TestbinaryTree {
class TreeNode{
// 内部类
char value;
TreeNode left;
TreeNode right;
public TreeNode(char value){
this.value=value;
}
}
先序:
//二叉树的前序遍历
void binaryTreePrevOrder(TreeNode root){
if(root==null){
return;//函数结束
}
//root不为空时 先递归左边 再递归右边
System.out.println(root.value+" ");
binaryTreePrevOrder(root.left);
binaryTreePrevOrder(root.right);
}
中序:
//二叉树的中序遍历 左 根 右
void binaryTreeInOrder(TreeNode root){
if(root==null){
return;//函数结束
}
binaryTreePostOrder(root.left);
// root的left为空时打印root.value
System.out.println(root.value + " ");
binaryTreePostOrder(root.right);
}
后序:
//二叉树的后序遍历
void binaryTreePostOrder(TreeNode root){
binaryTreePostOrder(root.left);
binaryTreePostOrder(root.right);
// root的right为空时打印root.value
System.out.println(root.value + " ");
}
}
一些典型的面试题,有助于帮助你更好的理解二叉树的三种遍历方法。
//根据字符串先序遍历创建二叉树
public int i=0;
TreeNode createTestTree(String s){
TreeNode root=null;
if(s.charAt(i)!='#'){
root=new TreeNode(s.charAt(i));//根
i++;
root.left=createTestTree(s);//左
root.right=createTestTree(s);//右
}else{
i++;
}
}