Java Reference
In-Depth Information
/ ** Baseclassforexpressiontreenodes * /
publicinterfaceVarBinNode{
publicbooleanisLeaf();//Allsubclassesmustimplement
}
/ ** Leafnode * /
classVarLeafNodeimplementsVarBinNode{
privateStringoperand; //Operandvalue
publicVarLeafNode(Stringval){operand=val;}
publicbooleanisLeaf(){returntrue;}
publicStringvalue(){returnoperand;}
};
/ ** Internalnode * /
classVarIntlNodeimplementsVarBinNode{
privateVarBinNodeleft; //Leftchild
privateVarBinNoderight; //Rightchild
privateCharacteroperator; //Operatorvalue
publicVarIntlNode(Characterop,
VarBinNodel,VarBinNoder)
{operator=op;left=l;right=r;}
publicbooleanisLeaf(){returnfalse;}
publicVarBinNodeleftchild(){returnleft;}
publicVarBinNoderightchild(){returnright;}
publicCharactervalue(){returnoperator;}
}
/ ** Preordertraversal * /
publicstaticvoidtraverse(VarBinNodert){
if(rt==null)return; //Nothingtovisit
if(rt.isLeaf()) //Processleafnode
Visit.VisitLeafNode(((VarLeafNode)rt).value());
else{ //Processinternalnode
Visit.VisitInternalNode(((VarIntlNode)rt).value());
traverse(((VarIntlNode)rt).leftchild());
traverse(((VarIntlNode)rt).rightchild());
}
}
Figure5.10 An implementation for separate internal and leaf node representa-
tions using Java class inheritance and virtual functions.
Search WWH ::




Custom Search