非递归中序遍历

简介: 非递归思想
class Solution {
    public int i = 0;
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        i = postorder.length-1;
        if(inorder == null || postorder == null){
            return null;
        }
        return buildTreeChild(inorder,postorder,0,postorder.length-1);
    }
    public TreeNode buildTreeChild(int[] inorder,int[] postorder,
    int inbegin,int inend){
        if(inbegin > inend){
            return null;
        }
        TreeNode root = new TreeNode(postorder[i]);
        //逗号写成了点号,一定要注意细节
        int rootIndex = findIndex(inorder,inbegin,inend,postorder[i]);
        i--;
        root.right = buildTreeChild(inorder,postorder,rootIndex + 1,inend);
        root.left = buildTreeChild(inorder,postorder,inbegin,rootIndex - 1);
        return root;
    }
    public int findIndex(int[] inorder,int begin,int inend,int key){
        for(int i =begin;i<= inend;i++){
            if(inorder[i] == key){
                return i;
            }
        }
        return -1;
    }
}
相关文章
|
1月前
|
存储
二叉树的先序遍历和后序遍历的区别
先序遍历和后序遍历在遍历顺序、应用场景、实现方式以及复杂度等方面都存在一定的区别,在实际应用中需要根据具体问题的需求来选择合适的遍历方式。
68 5
|
7月前
二叉树的前序遍历、中序遍历、后序遍历
二叉树的前序遍历、中序遍历、后序遍历
|
1月前
|
算法
非递归实现后序遍历的时间复杂度是多少?
虽然非递归实现后序遍历的时间复杂度与递归实现相同,但在空间复杂度和一些特定场景下的性能表现等方面可能会有所不同,具体使用哪种方式还需要根据实际情况进行权衡。
|
7月前
|
存储
LeetCode题94,44,145,二叉树的前中后序遍历,非递归
LeetCode题94,44,145,二叉树的前中后序遍历,非递归
66 0
非递归方式实现二叉树的前、中、后序遍历
非递归方式实现二叉树的前、中、后序遍历
【C++】非递归实现二叉树的前中后序遍历
【C++】非递归实现二叉树的前中后序遍历
【C++】非递归实现二叉树的前中后序遍历
|
算法 搜索推荐
从二叉树的前中后序遍历,我们来说递归和快速排序
从二叉树的前中后序遍历,我们来说递归和快速排序
从二叉树的前中后序遍历,我们来说递归和快速排序
|
存储 索引
根据前序遍历和[中序遍历]
根据前序遍历和[中序遍历]
109 0

热门文章

最新文章