树——重建二叉树
来源:互联网 发布:pla算法 迭代次数 编辑:程序博客网 时间:2024/06/05 15:33
①先处理传入的数组,如果数组没问题了,正式开始根据两个数组构建树
BitTree Construct(char *preorder, char *inorder, int len) { if (preorder==nullptr || inorder==nullptr || len < 0) return nullptr; return ConstructCore(preorder, preorder + len - 1, inorder, inorder + len - 1);}
②传入先序遍历数组的首尾指针和中序遍历的首尾指针
BitTree ConstructCore(char *preorderbegin, char *preorderend, char *inorderbegin, char *inorderend) { int rootValue = preorderbegin[0]; BitTree root = (BitTree)malloc(sizeof(BitNode)); root->data = rootValue; root->left = nullptr; root->right = nullptr;//构建树的节点 if (preorderbegin == preorderend) { if (inorderbegin == inorderend&&*preorderbegin == *preorderend)//这里没搞懂① return root; else throw std::exception("Invalid input"); } char* rootInorder = inorderbegin; while (rootInorder <= inorderend&&*rootInorder != rootValue) ++rootInorder; if(rootInorder==inorderend&&*rootInorder!=rootValue) throw std::exception("Invalid input"); int leftlen = rootInorder - inorderbegin; char *leftPreorderEnd = preorderbegin + leftlen; if (leftlen > 0) { root->left = ConstructCore(preorderbegin + 1, leftPreorderEnd, inorderbegin, rootInorder - 1); } if (leftlen < preorderend - preorderbegin) root->right = ConstructCore(leftPreorderEnd + 1, preorderend, rootInorder + 1, inorderend); return root;}
阅读全文
0 0
- 二叉树——重建二叉树
- 树——重建二叉树
- 剑指offer——重建二叉树
- 《剑指offer》——重建二叉树
- 剑指Offer——重建二叉树
- 剑指offer——重建二叉树
- 重建二叉树——剑指offer
- 重建二叉树——递归
- 剑指offer——重建二叉树
- 剑指offer——重建二叉树
- 剑指offer——重建二叉树
- 剑指offer——重建二叉树
- 剑指offer——重建二叉树
- 剑指offer——重建二叉树
- 面试算法—重建二叉树
- 剑指offer—重建二叉树
- 《剑指offer》—4、重建二叉树
- 面试题6—重建二叉树
- 翻译连载 | JavaScript轻量级函数式编程-第5章:减少副作用 |《你不知道的JS》姊妹篇
- 利用nginx 反向代理解决跨域问题
- LeetCode: 66. Plus One
- 翻译连载 | JavaScript轻量级函数式编程-第4章:组合函数 |《你不知道的JS》姊妹篇
- NGUI_的Atlas图集学习_005
- 树——重建二叉树
- 文件所有者、用户组和其他人的概念理解以及修改权限的操作
- 集群上配置Keepalived实现负载均衡
- Fast-cgi cgi nginx php-fpm 的关系
- 今天有人问我WebStorm运行node.js怎么没有提示
- vue-router在同一个路由下切换,取不到变化的路由参数
- 翻译连载 | JavaScript 轻量级函数式编程-第3章:管理函数的输入 |《你不知道的JS》姊妹篇
- combox如何根据下拉框执行不同的操作
- D