#以字符串的形式输出二叉链,表示形式为 结点值(左子树),(右子树)
#用到递归,这里是顺序递归,所以是一般语句在递归语句后面,
#访问下一个结点的条件:只要有左右孩子结点就会有新的子树,就要这样继续递归
#括号的加入时间:有子树就会有元素,添加这个子树的时候左右都要有括号,在添加子树一开始的时候加(,在给添加完这个子树的时候加)
#逗号的加入时间:有右子树时就要添加,然后再进行添加右子树的操作
#递归过程:遇到一个结点,先把这个结点添加到字符串里面,然后如果有子树的话添加左括号,添加完左子树之后,如果没有右子树,直接添加一个右括号,如果有右子树,添加完右子树之后再添加右括号
#以字符串的形式输出二叉链,表示形式为 结点值(左子树),(右子树)
#用到递归,这里是顺序递归,所以是一般语句在递归语句后面,
#访问下一个结点的条件:只要有左右孩子结点就会有新的子树,就要这样继续递归
#括号的加入时间:有子树就会有元素,添加这个子树的时候左右都要有括号,在添加子树一开始的时候加(,在给添加完这个子树的时候加)
#逗号的加入时间:有右子树时就要添加,然后再进行添加右子树的操作
#递归过程:遇到一个结点,先把这个结点添加到字符串里面,然后如果有子树的话添加左括号,添加完左子树之后,如果没有右子树,直接添加一个右括号,如果有右子树,添加完右子树之后再添加右括号
def DispBTree(self):
return self._DispBTree(self.b)
def _DispBTree(self,t):
if t==None:
return ""
else:#其实添加每个结点的值是最主要的一步,之后才需要看是否需要对左右子树进行递归
bstr=t.data
if t.lchild!=None or t.rchild!=None:
bstr+="("
bstr+=self._DispBTree(t.lchild)#添加左子树,对左子树进行递归
if t.rchild!=None:
bstr+=","
bstr+=self._DispBTree(t.rchild)#添加右子树,对右子树进行递归
bstr+=")"
return bstr