学习数据结构的第三天

// public void add(E e)
// {
// add(root,e); //所有的逻辑,不管是不是null的逻辑,都在另一个函数里面去做。
// }
// private void add(Node root1,E e) //内在的实现的逻辑应该写成是:private 不能让别人知道的逻辑。
// {
//// if() //如果说add到 left为空,right也为空的话,那么其实是出口了.
// if(root1==null) //其实应该要是root1去比的。
// {
// root=new Node(e);//root为空也是一种情况
// return ;
// }
// if(root1.value.compareTo(e)>0 && root1.left==null) //插入的值如果说比根的值小的话
// {
// root1.left=new Node(e);
// return ;
// }
// if(root1.value.compareTo(e)<0 && root1.right==null) //插入的值如果说比根的值小的话
// {
// root1.right=new Node(e);
// return ;
// }
// if(root1.value.compareTo(e)>0 ) //插入的值如果说比根的值小的话
// {
// add(root1.left,e);
// return ;
// }
// if(root1.value.compareTo(e)<0) //插入的值如果说比根的值小的话
// {
// add(root1.right,e);
// return ;
// }
// }
//递归之增加重新写:
public void add(E e)
{
root=add(root,e);
}
private Node add (Node node,E e)
{
if(node==null)
{
return new Node(e);
}
if(e.compareTo(node.value)>0)
{
node.right=add(node.right,e);
}
if(e.compareTo(node.value)<0)
{
node.left=add(node.left,e);
}
return node;
}

这里是两种add的区别,上面两种add 和下面两种add 的区别

 //这个的写法和上面那个写法呢,其实都是ok的,这个写法就是说,左子树的结局有左子树的递归函数决定

//右子树的结局由右子树来决定,然后返回根的意思。

//并且知道一件事情,就是指针如果是传参的引用类型的话,有一个要点需要注意。

//如果是传参的引用类型,最后需要返回这片空间更好。原因:原来a的指向空间A,参数b指向空间A,然后b去指向另一片空间,那么我们需要改变的是a的指向。

//因此:如果是引用类型作为函数的参数(指的是这片空间),最后返回新的空间的引用是更好的选择。

写递归函数的一个小要点:写出口、写缩小的条件,这两件事情是关键

写出口:意味着什么时候递归函数可以结束

写缩小的条件:表示递归函数是怎么逐渐缩小的过程。

关于二叉树的三种遍历的作用:

先序遍历:在第一次遍历到节点时就执行操作,一般只是想遍历执行操作(或输出结果)可选用先序遍历;

中序遍历:对于二分搜索树,中序遍历的操作顺序(或输出结果顺序)是符合从小到大(或从大到小)顺序的,故要遍历输出排序好的结果需要使用中序遍历

后序遍历:后续遍历的特点是执行操作时,肯定已经遍历过该节点的左右子节点,故适用于要进行破坏性操作的情况,比如删除所有节点


判断树中是否存在相同子树时,用的就是后序遍历。对应了“在执行操作时,肯定访问完了左右两个子树"

销毁所有节点,也可以用层次遍历实现。

上面的回答来自于知乎。

对我的启发:如果说是先序,按照自身-》左子树-》右子树的顺序,那么是第一遍遍历到就执行,普通的输出结果其实就可以用先序遍历。

中序遍历:左中右  确实对于二叉搜索树来说,就是按小到大来输出结果,那么就是中序遍历,因为它按照顺序排布的。

后序遍历:访问该节点之前,其子节点肯定已被访问,那么破坏性操作这个也是很说得过去的。

那么是否存在相同子树,也可以用后序遍历。

意思是说:对于什么时候选择什么样的遍历方式,可以根据它的三种特点来选择遍历的方式。

那么为什么说对于销毁所有节点可以用层次遍历来实现,因为的话层次遍历是按照从顶到下的顺序进行遍历的,一层一层,从第一层一直往下的顺序来排布的。

所以说销毁所有节点也可以用层次序遍历来实现。

同时,也需要了解一件事情:什么时候用树这种结构。像之前说的,建立这个二叉树:用来搜索,左子节点必定比当前节点小,右子节点必定比当前节点大的结构。并且树这种结构还可以用于,

上下级的管理那种,因为树是一种由上到下的一种结构。

猜你喜欢

转载自www.cnblogs.com/startFrom0/p/12590435.html
今日推荐