上机一般更多考察二叉树的遍历
这里补充一点
二叉树的五种基本形态
1、空二叉树(没有一个结点);
2、只有一个根节点;
3、只有左子树;
4、只有右子树;
5、既有左子树又有右子树;
初试的时候忘了,卷子上没写出来,白白失去了6分。
那么
二叉树的遍历有
- 先序遍历 中左右
- 中序遍历 左中右
- 后序遍历 左右中
- 层次遍历 用队列
例题10.2 二叉树遍历
上面那个图就是意思是3种遍历已知两种的情况下求第三种,只有前序和后序的必须还加上满二叉树。
从上面中序后序的分析,就可以递归的依据p的位置来分析啦。
public class i1 {
public static void main(String[] args) {
String preOrder = "FDXEAG";
String inOrder = "XDEFAG";
TreeNode build = Build(preOrder, inOrder);
visit(build);
}
static TreeNode Build(String preOrder, String inOrder){
if(preOrder.length()==0){
return null;
}
char c = preOrder.charAt(0);
TreeNode treeNode = new TreeNode(c);
int position = inOrder.indexOf(c);
treeNode.left = Build(preOrder.substring(1,position+1),inOrder.substring(0,position));
treeNode.right = Build(preOrder.substring(position+1),inOrder.substring(position+1));
return treeNode;
}
static void visit(TreeNode treeNode){
if(treeNode==null)return;
visit(treeNode.left);
System.out.println(treeNode.data);
visit(treeNode.right);
}
}
class TreeNode {
char data;
TreeNode left;
TreeNode right;
TreeNode(char c) {
this.data = c;
this.left=null;
this.right=null;
}
}
例题:二叉排序数
static TreeNode2 insert(TreeNode2 root, int x){
if(root==null){
return new TreeNode2(x);
}
if(root.data<x){
root.right=insert(root.right,x);
}
if(root.data>x){
root.left=insert(root.left,x);
}
return root;
}
这样就好啦。
记得节点的样子哦,
优先队列
普通的栈和队列都是一种特殊的优先队列。emm这里不作过多说明了。