5.5 遍历二叉树和线索搜索树

深度遍历

void recurve(Node * ptr){
  if (null==ptr){
    return;
  }
  //前序 access(ptr)
  recurve(ptr->left);
  //中序 access(ptr)
  recurve(ptr->right);
  //后序 access(ptr)
}

前序遍历

中序遍历

后序遍历

广度遍历

前序+中序 / 后序+中序 可以构建二叉树

算法

建立二叉树

复制二叉树

计算深度

求节点总数

求叶子节点总数

线索搜索树

利用二叉链表的空指针域

具有n个节点的二叉链表,一共有2n个指针域,因为n个节点有n-1个孩子,即2n个指针域中,剩余指针域为 2n-(n-1)=n+1、
如果某个节点左孩子为空,则指向前驱,如果右孩子为空,则指向后继。这种改变指向的指针称之为“线索”。加上线索的二叉树称之为线索二叉树。按照某种遍历顺序使其变为线索二叉树的过程称之为“线索化”。
为了区分指针指向孩子还是指向前驱或后继,每个节点增加标志语ltag和rtag。tag为0则指向孩子,为1则指向前驱或后继。

typedef struct{
  TElementType data;
  int lTag,rTag;
  Node * l,*r;
} Node;

你可能感兴趣的:(5.5 遍历二叉树和线索搜索树)