求子孙(祖先)问题 2021/11/1
求某结点的所有子孙:先序遍历中,子孙在该结点后面;后序遍历中,子孙在该结点前面。
即先序遍历到该结点时,开始计数;后序遍历到该结点时,停止计数。
String Switch="Off";
int i=0;
public int count1(Node root,int x){
if (root==null) {
return i;
}
if (Switch=="On"){
i++;
}
if(root.getData()==x){
Switch="On";//先序遍历到该结点,打开开关。
}
count1(root.getLChild(),x);
count1(root.getRChild(),x);
if(root.getData()==x)
Switch="Off";//后序遍历到该结点,关闭开关
return (i);
}
与之相比,求祖先问题因为需要判断所求结点是(左结点,右结点,根节点),不如直接从根结点开始遍历,或是用数组存储后序遍历中结点之后的数值,与先序后面的数值取相同数。

浙公网安备 33010602011771号