自己关于二叉树的先序、中序、后序的理解。
这次我们请来了神奇的二叉树,什么是二叉树呢?
图片非原创,从别的网页上面拿的。
关于二叉树的图片:https://image.so.com/i?q=%E4%BA%8C%E5%8F%89%E6%A0%91%E5%9B%BE%E7%89%87&listsrc=sobox&listsign=79bcdbde047802919736e3cded83b409&src=360pic_strong#/
关于这个奇怪的东西遍历可以分为先序、中序、后序。
至于先序中序后序的理解可以这样。
对于一个节点而言,先序是先读取自己再读取左右。
中序是先读取左边的子分支节点,再读取自己,再读取右边的分支节点。
同理推断,后序是最后读取自己。
当然,至于左右读取方面是先左后右。
然后,对于这个图……
先序:
中序:
后序:
为什么我要读图片呢?因为……(我也不知道为什么我要放图片);
好了,经过观察不难发现(这个数有点多,我看着有点方,我还是放个少一点的二叉树来表示吧!!!)
首先,如果是先序的话,应该输出的是1 2 3
优先自己,所以先输出1,然后分别左右输出1 2
(还有就是要考虑什么东西不存在的时候的情况,比如说下面的!=null判定)
private void xianxu(Node node){
if(node != null) {
this.print(node);
if (node.getLeft() != null) xianxu(node.getLeft());
if (node.getRight() != null) xianxu(node.getRight());
}
}
中序就是先输出 左边的数据2,(中间输出)再输出自己的数据1,最后输出右边的数据3
private void zhongxu(Node node){
if(node != null) {
if (node.getLeft() != null) zhongxu(node.getLeft());
this.print(node);
if (node.getRight() != null) zhongxu(node.getRight());
}
}
然后后序同理!同理!同理!把自己放在后面,无私的先给自己的儿子(分支节点)出风头,表达了无私的父爱(或者说是母爱呢?)。
private void houxu(Node node){
if(node != null) {
if (node.getLeft() != null) houxu(node.getLeft());
if (node.getRight() != null) houxu(node.getRight());
this.print(node);
}
}
输出应该是先2 再3 最后1