重建二叉树(前序遍历和中序遍历)

xiaoxiao2021-02-28  78

void Rebuild(T pre[], size_t presize, T in[], size_t insize) { size_t idx = 0; _Rebuild(_root,pre,idx,presize,in,insize,0,insize); } void _Rebuild(Node<T>*& root, T pre[], size_t& idx, size_t presize, T in[], size_t insize, size_t left, size_t right) { if (left >= right || presize != insize) return; //在中序中找idx所在的元素 int i = left; while (i < right) { if (pre[idx] == in[i]) break; i++; } //没找到 if (i == right) return; //根为前序遍历的第一个元素 root = new Node<T>(pre[idx]); //重建左子树 if (left < i) _Rebuild(root->_left,pre,++idx,presize,in,insize,left,i); //重建右子树 if (i + 1 < right) _Rebuild(root->_right,pre,++idx,presize,in,insize,i+1,right); }
转载请注明原文地址: https://www.6miu.com/read-79160.html

最新回复(0)