[LeetCode]二叉树题目总结

【LeetCode】二叉树习题个人总结

近一个月来,刷了不少LeetCode题目。但是总还是感觉提高的不多,自己最初想的一边做一边总结的初衷也没有正常执行,今晚静下心来,总结一下和二叉树有关的题目。

基础题目:

【二叉树遍历】

Binary Tree Postorder Traversal

Binary Tree Preorder Traversal

Binary Tree Inorder Traversal

三道习题,即二叉树后序、先序以及中序遍历,个人感觉有一道题就够了。这三道题很基础,基本数据结构主要用到,题目要求使用迭代求解,按照算法导论上的着色方式即可完成,没什么多说的。

Postorder(后序)遍历为例,算法主要思想如下:

a) 初始化,根节点着白色入栈;

b) 如果栈为空,则遍历完成,转d),否则弹栈转c

c) 弹栈,判断出栈元素,若为白色(第一次发现),将其着红色入栈,然后将其左儿子入栈着白色(第一次发现)入栈;

若为红色,将其着为黑色(第二次发现,表明其左子树已经遍历完成)入栈,将其右子树着白色入栈(开始遍历其右子树);

若为黑色(第三次发现,此时左右子树军遍历完成),输出当前节点,此时以该节点为根的子树已经遍历完成;

b

d) 遍历完成算法结束。

以上算法中的栈,可以使用vectorstack等多种方式实现。

【二叉树广度遍历】

Binary Tree Level Order Traversal

Binary Tree Level Order Traversal II

Binary Tree Zigzag Level Order Traversal

三个题目,都是按照广度优先遍历二叉树,其实主要用到数据结构队列。算法这里不细说了,可以直接看代码。

【构造二叉树】

Construct Binary Tree from Inorder andPostorder Traversal

Construct Binary Tree from Preorder and InorderTraversal

Note:
You may assume that duplicates do not exist in thetree.

题目给出提示说,可以假设二叉树中不存在重复元素,这一点很重要,因为这两道题的主要思路都是根据先序或后续序列确定根,然后再依据中序序列将具体的序列分解为左右子树所对应的中序序列和先序(后序)序列。然后递归构造即可。

【平衡二叉树】

Balanced Binary Tree

Convert Sorted List to Binary Search Tree

Convert Sorted Array to Binary Search Tree

  这里首先明确平衡二叉树(Balance Binary Tree)的概念,平衡二叉树指的是它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。构造与调整方法 平衡二叉树的常用算法有红黑树、AVL、Treap、伸展树等。

首先Balance Binary Tree的判断,我这里采用递归的方法。

剩下两道题,根据有序序列构造平衡二叉查找树,区别在于有序序列给出的方式不同,主要思想就是选取有序序列中的中间元素作根,递归构造即可。

【枚举二叉查找树】

Unique Binary Search Trees

Unique Binary Search Trees II

题目说是唯一的二叉查找树,但实际上确实给出一个n,求出1~n的序列能够所有的不同结构的二叉查找树。

【改变二叉树结构】

Flatten Binary Tree to Linked List

Recover Binary Search Tree

Populating Next Right Pointers in Each Node

Populating Next Right Pointers in Each Node II

【二叉树判等】

Symmetric Tree

Same Tree

【二叉树结构判等】

Binary Tree Maximum Path Sum

Lowest Common Ancestor of a Binary Tree Part I

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值