在博客上记录算法笔记,是因为想push自己每天坚持刷几道算法题,同时也希望能把自己总结到的经验分享给大家,希望大家阅读愉快😊
目录
题目:二叉树的下一个节点 :给定一个二叉树和其中的一个节点,如何找出中序遍历的下一个节点?树中有三个指针,左右节点指针和父节点的指针
题目:用两个栈实现一个队列,并完成在队列尾部插入节点和在队列头部插入节点的功能
弄清楚在打印链表的时候是否能修改链表的结构?遍历链表,第一个遍历的节点是最后一个输出,最后一个遍历的节点是第一个输出,这是典型的后进先出,因此可以想到栈先进后出的属性,经过一个节点,就把这个节点放在栈中。


输入的链表有多个节点,输入的链表只有一个节点
输出链表的头节点为空
前序遍历的第一个节点是根节点,根据这个值去扫描中序遍历,就能获得左子树和右子树的节点值;用递归的方法去构建左子树和右子树。


如果传入的前序指针和中序指针为null,长度小于等于0,就返回空值
情况1:如果一个节点有右子树,那么他的下一个节点是右指数的最左节点,也就是说从右子节点的左指节点的指针触发,就可以找到下一个节点。
情况2:如果一个节点没有右子树,这个节点是父节点的左节点,那么他的下一个节点就是父节点;如果一个节点没有右子树,这个节点是父节点的右节点,那么这种情况就比较复杂,可以沿着父节点的指针一直向上遍历,一直到达是父节点的左子节点,那么这个节点的父节点就是下一节点

1、完全二叉树、不完全二叉树
2、特殊二叉树,如所有节点都没有左子节点的二叉树和所有节点都没有右子节点的二叉树,只有一个节点的二叉树,
3、不同节点位置的下一个节点
先将元素压入到一个栈中,然后弹出放入另外一个栈,从另外一个栈弹出的顺序就是队列先进先出的顺序

1、往空的队列汇总添加、删除元素
2、往非空的队列汇总添加、删除元素
3、连续删除元素直到队列是非空
先将元素入一个空的队列,然后将元素压入另外一个队列,而剩下的队列尾部的元素被弹出,然两个队列的元素如此这样反复