为根的子树中,求 x 结点所在的层次 if (p== null ) // 空树或查找不成功 return -1; if (p. data .equals(x)) return i; // 查找成功 int level = getLevel(p. left , i+1, x); // 在左子树查找 if (level==-1) level = getLevel(p. right , i+1, x); // 继续在右子树中查找 return level; } public BinaryNode<T> FirstpostOrder(){ // ⑩求一颗二叉树在后根次序遍历下第一个访问的结点. BinaryNode<T> p= this . root ; while ( true ){ while (p. left != null ) p= p. left ; if (p. right != null ) {p= p. right ; continue ;} break ;} return p; } public BinaryTree(BinaryTree<T> bitree){ //11 复制一颗二叉树。 this . root = copy(bitree. root ); } private BinaryNode<T> copy(BinaryNode<T> p){ // 复制以 p 根的子二叉树, 返回新建子二叉树的根结点 if (p== null ) return null ; BinaryNode<T> q= new BinaryNode<T>(p. data ); q. left = copy(p. left ); // 复制左子树,递归调用 q. right = copy(p. right ); // 复制右子树,递归调用 return q; // 返回建立子树的根结点