其他分享
首页 > 其他分享> > 判断回文单链表,链表的遍历额二叉树的遍历

判断回文单链表,链表的遍历额二叉树的遍历

作者:互联网

其实,借助二叉树后序遍历的思路,不需要显式反转原始链表也可以倒序遍历链表,下面来具体聊聊。

对于二叉树的几种遍历方式,我们再熟悉不过了:

void traverse(TreeNode root) {
    // 前序遍历代码
    traverse(root.left);
    // 中序遍历代码
    traverse(root.right);
    // 后序遍历代码
}
在 学习数据结构的框架思维 中说过,链表兼具递归结构,树结构不过是链表的衍生。那么,链表其实也可以有前序遍历和后序遍历:

void traverse(ListNode head) {
    // 前序遍历代码
    traverse(head.next);
    // 后序遍历代码
}
这个框架有什么指导意义呢?如果我想正序打印链表中的val值,可以在前序遍历位置写代码;反之,如果想倒序遍历链表,就可以在后序遍历位置操作:

/* 倒序打印单链表中的元素值 */
void traverse(ListNode head) {
    if (head == null) return;
    traverse(head.next);
    // 后序遍历代码
    print(head.val);
}

记住不要跳进递归,把递归那部分当做个整体,已经解决了的整体,或者极限思想,就看做两个数的处理,递归里面就两个数,处理一轮递归就出来了,然后用局部推导全局的思想。

标签:traverse,遍历,后序,前序,head,链表,二叉树
来源: https://blog.csdn.net/qq_15821487/article/details/120232938