二叉树 的基本操作
二叉树定义
详见我的上一篇博客:
初识二叉树
结点的定义:
结点的定义 有数值域,还有左孩子的引用和右孩子的引用,分别表示以左右孩子为根的左子树和右子树
public class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int val) {
this.val = val;
this.left = null;
this.right = null;
}
@Override
public String toString() {
return String.format("TreeNode{%c}", val);
}
}
构建二叉树
我们先进行构建两棵二叉树,方便验证下面操作是否正确:
public class buildTree {
public static TreeNode buildTree1() {
// 让大家练习前中后序的树
TreeNode a = new TreeNode('a');
TreeNode b = new TreeNode('b');
TreeNode c = new TreeNode('c');
TreeNode d = new TreeNode('d');
TreeNode e = new TreeNode('e');
TreeNode f = new TreeNode('f');
TreeNode g = new TreeNode('g');
TreeNode h = new TreeNode('h');
TreeNode i = new TreeNode('i');
TreeNode j = new TreeNode('j');
TreeNode k = new TreeNode('k');
TreeNode l = new TreeNode('l');
TreeNode m = new TreeNode('m');
TreeNode n = new TreeNode('n');
a.left = b; a.right = c;
b.left = d; b.right = e;
c.left = f; c.right = g;
d.right = h;
f.left = i; f.right = j;
g.right = k;
h.right = l;
j.left = m;
m.left = n;
return a;
}
public static TreeNode buildTree2() {
// 构建课件上的树
TreeNode a = new TreeNode('a');
TreeNode b = new TreeNode('b');
TreeNode c = new TreeNode('c');
TreeNode d = new TreeNode('d');
TreeNode e = new TreeNode('e');
TreeNode f = new TreeNode('f');
TreeNode g = new TreeNode('g');
TreeNode h = new TreeNode('h');
a.left = b; a.right = c;
b.left = d; b.right = e;
c.left = f; c.right = g;
e.right = h;
return a;
}
}
前、中、后序遍历
前、中、后序遍历主要就是头结点什么时候处理,我们可以利用递归的思想,简便的求解。