由前序和中序数组重建二叉树
来源:互联网 发布:中金 薪水 知乎 编辑:程序博客网 时间:2024/04/29 09:44
1、重建二叉树
来源:牛客网
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
2、思路:先序第一个元素a为根节点,在中序数组中,a左边的元素为左子树,右边为右子树。左右子树放到递归中处理即可
3、代码:
private TreeNode conBinaryTreeByPreAndIn(TreeNode root, int[] pre, int[] in, int pre_start, int pre_end, int in_start, int in_end) { int i, in_pos = 0; // 找到先序中第一个元素在中序中的下标pos for (i = in_start; i <= in_end; i++) { if (in[i] == root.val) { in_pos = i; break; } } TreeNode leftNode = null, rightNode = null; int left_num = in_pos-in_start;//左子树数目 // 当前根节点存在左子树 if (in_pos > in_start) { leftNode = new TreeNode(pre[pre_start + 1]); root.left = leftNode; } // 当前根节点存在右子树 if (in_pos < in_end) { rightNode = new TreeNode(pre[pre_start+(left_num+1)]); root.right = rightNode; } // 根节点左边子节点数大于1 if (in_pos - in_start > 1) { conBinaryTreeByPreAndIn(leftNode, pre, in, pre_start + 1, pre_start + left_num, in_start , in_pos - 1); } // 根节点右边子节点数大于1 if (in_end - in_pos > 1) { conBinaryTreeByPreAndIn(rightNode, pre, in, pre_start + left_num + 1, pre_end, in_pos + 1, in_end); } return root; }
阅读全文
0 0
- 由前序和中序数组重建二叉树
- 根据二叉树的前序数组和中序数组生成二叉树
- 【二叉树】由前序遍历和中序遍历重建二叉树
- 二叉树--由前序遍历和中序遍历重建二叉树
- 由前序遍历序列和中序遍历序列重建二叉树
- 由前序遍历和中序遍历重建二叉树,再实现后续遍历
- 由前序遍历和中序遍历重建二叉树
- 由前序遍历和中序遍历重建二叉树
- 由前序遍历和中序遍历重建二叉树
- ~由前序遍历和中序遍历重建二叉树~
- 剑指offer 6---由前序遍历和中序遍历重建二叉树
- 由前序遍历和中序遍历重建二叉树
- 剑指:由前序遍历和中序遍历重建二叉树
- 由前序遍历和中序遍历重建二叉树
- 每日一题之由前序遍历和中序遍历重建二叉树
- 由前序遍历和中序遍历重建二叉树
- 由前序遍历和中序遍历重建二叉树
- 由前序遍历和中序遍历重建二叉树
- PHP利用curl实现爬虫
- C++const详解
- Codeforces Round #435 (Div. 2)B. Mahmoud and Ehab and the bipartiteness(二分图,染色法)
- 关于Foundation 对话框组件关闭后,页面自动滚动的解决办法
- MarkdownPad 2 在win10下出错:HTML 渲染错误(This view has crashed) 的解决办法 + MarkdownPad2.5 注册码
- 由前序和中序数组重建二叉树
- PAT basic 1008. 数组元素循环右移问题 (20)
- Java设计模式——工厂模式(Factory Pattern)
- 那些遇到一两次的BUG
- pygame编写飞机大战(2)-pygame快速入门
- 170923 逆向-Reversing.kr(MusicPlayer)
- SSH与SSM学习之Struts212——标签
- Python中zip()函数用法举例
- Hibernate学习---第八节:关联关系