leetcode部分解题思路
1.二叉树,前序遍历
通过栈,先把root放入。判断栈不为空时,执行以下循环:抛出栈顶元素并记录值,将当前元素的右子(如有)入栈,左子(如有)压栈。
最后返回记录值的数组即可。
后序遍历,
与前序基本一致,只是抛出栈顶元素后,先将左子入栈,再将右子入栈。保证所有顺序是右在最上面
最后将数组逆序,即为结果
中序遍历,
先建个head节点,值随意,右子指向root,将head入栈。当栈不空,执行循环:
抛出栈顶元素并记录值,当前节点指向右子,执行内循环:当前节点不为空时,节点入栈,当前节点指向左子;
返回数组。
2.链表
判断是否有环:一快(走两步)一慢(走一步),直到相等(有)或快的为空(无)
逆序:逐个遍历,指针倒过来(需三个指针,分别一直指向前中后三个节点)
找链表环开始的节点:在判断环的基础上,当快慢相等时,使一个回到head开始走next,另一个当前走next,再相遇就是环的开始节点