二叉树的基本性质

一、二叉树的定义:

  是n(n≥0)个结点的有限集合。n=0的树称为空二叉树;n>0的二叉树由一个根结点以及两棵互不相交的、分别称为左子树和右子树的二叉树组成 。

二、二叉树抽象数据类型

数据集合:二叉树的结点集合,每个结点由数据元素和构造数据元素之间关系的指针组成。
操作集合:(1)双亲结点:把当前结点的双亲结点置为当前结点。
(2)左孩子结点:把当前结点的左孩子结点置为当前结点。
(3)左插入结点:若当前结点非空,则创建新结点x作为当前结点的左孩子结点,原当前结点的左孩子结点则成为新结点的左孩子结点。
(4)左删除子树:若当前结点非空,则删除当前结点左子树的全部结点。
(5)遍历二叉树:按某种遍历方法访问二叉树的每个结点,且每个结点只访问一次。
二叉树的存储结构主要有三种:顺序存储结构、链式存储结构和仿真指针存储结构。

三、二叉树遍历的基本方法分为前序遍历、中序遍历和后序遍历这几种方法。

1、先序遍历:先访问本节点,再访问该节点的左孩子和右孩子;
2、中序遍历:先访问左孩子,再访问本节点,最后访问右孩子;
3、后序遍历:先访问左右孩子,最后访问本节点。
4、层次遍历:按照树的每一层(高度)进行遍历。

public class BiTree{ 
    private BiTreeNode root;	//根指针
    private void preOrder(BiTreeNode t, Visit vs){//前序
    if(t != null){
      vs.print(t.data);
      preOrder(t.getLeft(),vs);
      preOrder(t.getRight(),vs);
     }
  }
    private void inOrder(BiTreeNode t, Visit vs){//中序
    if(t != null){
       inOrder(t.getLeft(),vs);
       vs.print(t.data);
       inOrder(t.getRight(),vs);
      }
  }	
   private void postOrder(BiTreeNode t, Visit vs){//后序
     if(t != null){
        postOrder(t.getLeft(),vs);
        postOrder(t.getRight(),vs);
        vs.print(t.data);
     } 
  }
      public static void levelOrder(BiTreeNode t, Visit vs) throws Exception{	//层序遍历二叉树t
            LinQueue q = new LinQueue();
            if(t == null) return;
            BiTreeNode curr;
            q.append(t);
            while(! q.isEmpty()){
              	curr = (BiTreeNode)q.delete();
              	vs.print(curr.data);
   	          if(curr.getLeft() != null)
  	           q.append(curr.getLeft());
  	          if(curr.getRight() != null)
  	          q.append(curr.getRight());
             }
  	} 
}

四、二叉树的构造函数

public class BiTree{ 
    BiTree(){	//构造函数
	root = null;
	}
    BiTree(Object item, BiTree left, BiTree right){//构造函数
        	BiTreeNode l, r;
        	if(left == null) 	l = null;
	       else		l = left.root;
	       if(right == null) 	r = null;
	       else 		r = right.root;		
	      root = new BiTreeNode(item, l, r);	
	}
     public void preOrder(Visit vs){ 	//前序遍历
      	reOrder(root, vs);
	}
    public void inOrder(Visit vs){ 	//中序遍历
     	inOrder(root, vs);
	}
   public void postOrder(Visit vs){ 	//后序遍历
	    postOrder(root,vs);
	}
}

五、二叉树游标类

public class BiTreeInterator{
      BiTreeNode root;		//根指针
      BiTreeNode current; 		//当前结点
      int iteComplete; 		//到达尾部标记	
       BiTreeInterator(){		//构造函数
    }	
       BiTreeInterator(BiTreeNode tree){ 	//构造函数
	root = tree;
	current = tree;
	iteComplete = 1;
    }
       public void reset(){			//重置
	}
       public void next(){		//下一个结点
	}	
       public boolean endOfBiTree(){	//结束否
	return iteComplete == 1;
	}	
       public Object getData(){		//取数据元素
	if(current == null){
                return null;
            }else{
                 return current.data;	
           }
	}
发布了37 篇原创文章 · 获赞 8 · 访问量 5936

猜你喜欢

转载自blog.csdn.net/weixin_43741599/article/details/99705710