求子孙(祖先)问题 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);
    }

  与之相比,求祖先问题因为需要判断所求结点是(左结点,右结点,根节点),不如直接从根结点开始遍历,或是用数组存储后序遍历中结点之后的数值,与先序后面的数值取相同数。

 

posted @ 2021-11-01 18:00  utigoose  阅读(61)  评论(0)    收藏  举报