剑指Offer[Python版]
2021-02-05 06:15
标签:二叉树 find coding coder sel 打印 utf-8 前序遍历 pre 题目描述: 题目表述: 题目表述: 解题思路1 将链表遍历一遍,返回倒数第K个节点 解题思路2:倒数第k,就是正数第n-k+1(从1开始),设置两个指针p1 p2,p1先走k-1步,然后p1 p2再一起走 p1为到达最后一个时,p2位于链表第n-k+1节点,也就是倒数第k个节点 参考题目地址:剑指Offer编程题 牛客网 剑指Offer[Python版] 标签:二叉树 find coding coder sel 打印 utf-8 前序遍历 pre 原文地址:https://www.cnblogs.com/eugene0/p/12729114.html面试题5 从尾到头打印单链表
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
解题思路:链表的每个元素由两部分组成,元素值和下一个元素的地址,输入一个链表,开始指针指向第一个节点,操作完一个节点接着将指针指向第二个节点,将元素值保存在列表中,逆序操作是list[::-1]
代码:class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
res = []
while listNode:
res.append(listNode.val)
listNode = listNode.next
return res[::-1]
面试题6 重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
解题思路:
递归思想。前序遍历中第一个元素是根,因此在中序遍历中找到根的位置下标,根将中序遍历分为两部分,分别是左子树和右子树,然后继续递归寻找左右子树的根节点。
代码:class Solution:
# 返回构造的TreeNode根节点
def reConstructBinaryTree(self, pre, tin):
# write code here
if not pre or not tin:
return None
root = TreeNode(pre[0])
index = tin.index(pre[0])
root.left = self.reConstructBinaryTree(pre[1:1+index],tin[:index])
root.right = self.reConstructBinaryTree(pre[1+index:],tin[1+index:])
return root
面试题7 用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
解题思路:
实现入队和出队操作,stackA用来进栈,stackB出栈,stackB为空则stackA出栈给stackB
代码:# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.stackA = []
self.stackB = []
def push(self, node):
self.stackA.append(node)
def pop(self):
if not self.stackB:
while self.stackA:
self.stackB.append(self.stackA.pop())
return self.stackB.pop()
面试题:链表中倒数第K个节点
代码class Solution:
def FindKthToTail(self, head, k):
# write code here
l = []
while head != None:
l.append(head)
head = head.next
if k > len(l) or k
代码class Solution:
def FindKthToTail(self, head, k):
# write code here
if head==None or k 1:
if p1.next != None:
p1 = p1.next
k -= 1
else:
return None
while p1.next != None:
p1 = p1.next
p2 = p2.next
return p2