3.第九章 树--9.3 二叉树结点类表示
一、BTNode<E>的构造函数
二、取得和设置数据及连接
package jiangning.tree; public class BTNode<E> { private E data ; private BTNode<E> left ; private BTNode<E> right ; // 构造器初始化 public BTNode(E initialData, BTNode<E> initialLeft, BTNode<E> initialRight){ data = initialData; left = initialLeft; right = initialRight; } public E getData() {//从这个结点取得数据 return data ; } public void setData(E newData) { this.data = newData; } public BTNode<E> getLeft() {//取得指向这个结点的左孩子的引用 return left ; } public void setLeft(BTNode<E> left) { this.left = left; } public BTNode<E> getRight() {//取得指向这个结点的右孩子的引用 return right ; } public void setRight(BTNode<E> right) { this.right = right; } }
三、测试一个结点是否是叶子结点
左孩子的引用和右孩子的引用都是空引用。
public boolean isLeaf(){ return (left == null) && ( right == null ); }
四、从最左结点活最右结点获取数据
最左结点是字符L,不是字符R,因为R使用了一个右连接。
public E getLeftmostData(){ if(left == null){ return data ; } return left .getLeftmostData();//利用递归获取最左边的元素 }
五、删除最左或最右结点
1.如图
2.删除最左结点的不同情况分析
1)只有一个结点:如上图只有一个节点8时,删除最左结点,起始就是删除当前节点8,这样返回的树应该是null。
2)只有一个右节点情况,删除8的最左节点,在删除节点8后,剩余结点6,
3)存在最左结点:
在进行删除的时候实际上时对原的树进行重新赋值。
用this关键字,一个指向调用这个方法的对象的应用。
public BTNode<E> removeLeftmost(){ if(left == null){//左结点是根结点因为它没有孩子。 return right ; } else{ left = left .removeLeftmost(); return this ; } }
You never know till you have tried.
不尝试,不知晓。
转载于:https://blog.51cto.com/2008jiangning/1311217