在了解了查找和排序后,咱们又从新将目光放回数据结构上,本章咱们将学习一种非线性数据结构——树。html
public void preorder(ArrayIterator<T> iter){ iter.add(element); if(left != null) left.preorder(iter); if(right != null) right.preorder(iter); }
public void inorder(ArrayIterator<T> iter){ if(left != null) left.inorder(iter); iter.add(element); if(right != null) right.inorder(iter); }
public void postorder(ArrayIterator<T> iter){ if(left != null) left.postorder(iter); if(right != null) right.postorder(iter); iter.add(element); }
public void levelorder(TreeNode root) { ArrayDeque<TreeNode> deque=new ArrayDeque<TreeNode>(); deque.add(root);//根节点入队 while(!deque.isEmpty()){ TreeNode temp=deque.remove(); System.out.print(temp.val+"--"); if(temp.left!=null){ deque.add(temp.left); } if(temp.right!=null){ deque.add(temp.right); } } }
TreeNode类
,每一结点都将包含一个指针,它指向将要存储在该结点的元素,以及该结点全部可能孩子的指针。is-a关系
是什么关系?is-a
(英语:subsumption,包含架构)指的是类的父子继承关系,例如类D是另外一个类B的子类(类B是类D的父类)。换句话说,一般"D is-a B"(B把D包含在内,或是D被包含在B内)指的是,概念体D物是概念体B物的特殊化,而概念体B物是概念体D物的通常化。举例来讲,水果是苹果、橘子、芒果与其余水果的通常化。toString
都没法消除错误。后来发现是因为LinkedBinaryTree
中的getLeft()
和getRight()
方法出现了问题,由于按照书上代码所写的它本来一直返回的是本来设置的right
和left
而不是实际应该返回的根结点的左孩子或右孩子。public BinaryTreeNode<T> getLeft() { return left; } public BinaryTreeNode<T> getRight() { return right; }
getLeft()
和getRight()
做出修改便可实现。isLeaf
的方法中输入所要判断的结点做为参数,可是后来发现这样引用的时候会特别丑。System.out.println(node1.isLeaf(node1));
public boolean isLeaf(){ if (left == null && right == null){ return true; } else { return false; } }
left
和right
都是开始时设定的结点其内容都为空,想要引用实际想要判断的结点的话要加上this
。public boolean isLeaf(){ if (this.left == null && this.right == null){ return true; } else { return false; } }
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 10/10 | 1/1 | 10/10 | |
第二周 | 246/366 | 2/3 | 20/30 | |
第三周 | 567/903 | 1/4 | 10/40 | |
第四周 | 2346/3294 | 2/6 | 20/60 | |
第五周 | 2346/3294 | 2/8 | 30/90 | |
第六周 | 1343/4637 | 2/10 | 20/110 |