zhedahht / CodingInterviewChinese2

《剑指Offer:名企面试官精讲典型编程面试题》第二版源代码
Other
5.32k stars 2.17k forks source link

面试题7:重建二叉树 #56

Open SunshlnW opened 5 years ago

SunshlnW commented 5 years ago

66-67行代码 if(rootInorder == endInorder && *rootInorder != rootValue) throw std::exception("Invalid input."); 这句没有用吧!

CoderLeonidas commented 5 years ago

66-67行代码 if(rootInorder == endInorder && *rootInorder != rootValue) throw std::exception("Invalid input."); 这句没有用吧!

只有一个节点且这个节点还和记录的根节点rootValue不一致,就是非法输入的意思吧

L-Xu-L commented 4 years ago

66-67行代码 if(rootInorder == endInorder && *rootInorder != rootValue) throw std::exception("Invalid input."); 这句没有用吧!

判断前序遍历找到的根的值 跟中序遍历里的根的值 是否相等吧

EternalWang commented 4 years ago

66-67行代码 if(rootInorder == endInorder && *rootInorder != rootValue) throw std::exception("Invalid input."); 这句没有用吧!

首先,这两句是在第61和62行。 个人认为应该把第61句if(rootInorder == endInorder && *rootInorder != rootValue)改为if(rootInorder > endInorder),处理在中序数组中未找到root的情况。

gyzcool commented 3 years ago

66-67行代码 if(rootInorder == endInorder && *rootInorder != rootValue) throw std::exception("Invalid input."); 这句没有用吧!

首先,这两句是在第61和62行。 个人认为应该把第61句if(rootInorder == endInorder && *rootInorder != rootValue)改为if(rootInorder > endInorder),处理在中序数组中未找到root的情况。

赞同!0.0 刚看到书的这块,觉得有点小问题。

lurenxiao1998 commented 3 years ago

刚才看到这块也觉得有问题,61行改成if(rootInorder > endInorder)或者58行改成while(rootInorder < endInorder && *rootInorder != rootValue)。不然感觉没办法处理找不到根的情况。

lurenxiao1998 commented 3 years ago

刚才看到这块也觉得有问题,61行改成if(rootInorder > endInorder)或者58行改成while(rootInorder < endInorder && *rootInorder != rootValue)。不然感觉没办法处理找不到根的情况。

虽然这个地方跑代码没有问题的,如果rootInorder > endInorder。那么在构建右子树的时候就会抛出异常。但是这个地方应该是写错了,不然太奇怪了。