关于二叉树的问题,也就是涉及二叉树的四种遍历算法以及基本的删除、插入等操作
中序遍历和前序遍历/后序遍历的结合
题目7:重建二叉树
层序遍历
题目32:①从上到下打印二叉树 ②分行打印二叉树 ③之字形打印二叉树
分析:层序遍历按行处理,所以利用队列的先入先出可以完成此操作
前序遍历
题目26:树的子结构
题目27:二叉树的镜像
题目28:对称二叉树
题目34:二叉树中和为某个值的路径
题目37:序列化二叉树
分析:前序遍历是先根节点root,符合情况先执行器得到我们需要的结果,
中序遍历
题目8:二叉树的下一个节点
题目54:二叉搜索树的第K大节点
分析:计算搜索树的第K大的节点,有顺序,而二叉搜索树是根节点大于左子节点,小于右子节点,所以利用中序遍历可以得到一个顺序递增的序列。只要遍历到第k个节点就是结果。
后序遍历
题目33:二叉树的后序遍历序列
题目55:①二叉树的深度 ②平衡二叉树
分析:从root开始计算一直到某个叶子节点才能得到此路径的深度,而计算一棵树的深度,只有计算完root左右子树的深度才可以,也就是说执行器是在左右子树递归之后得到,所以需要依次递归计算直到叶子。
递归中栈变量的问题
若是自己定义的变量传入到递归函数中,对变量进行的操作如果不删除,在返回到递归父函数里是保留操作的数据,而编译器自动调用的栈里使用的变量在跳出此递归函数时便从栈中删除了,所以数据信息回到了调用函数时的数据,与递归调用的子函数中处理的变量不同。
递归中的细节
递归函数返回的节点可以认为是null来处理,因为已经走了一遍
执行器的位置决定了前中后序遍历
网友评论