建立线索二叉树和线索二叉树的遍历

递归建立中序线索二叉树

1.左子树线索化返回修改后的pre;

2.当前结点p线索化

      建前驱线索当前结点空,指向pre;

      建后继线索pre空,pre指向当前结点;

      重新修改前驱结点p指针为 pre;

3.右子树线索化(将新的pre输入

  1. void InThreading(BiThrTree &p, BiThrTree &pre) {
  2. if (p) { // 对以p为根的非空二叉树进行中序线索化
  3. InThreading(p->lchild, pre); // 左子树线索化
  4. if (!p->lchild) // 空,建前驱线索
  5. { p->LTag = Thread; p->lchild = pre; }
  6. if (!pre->rchild) // 空,建后继线索
  7. { pre->RTag = Thread; pre->rchild = p; }
  8. pre = p; // 保持 pre 指向 p 的前驱
  9. InThreading(p->rchild , pre); // 右子树线索化
  10. } // if
  11. } // InThreading

非递归中序线索化二叉树

非递归先序线索化二叉树

  

非递归遍历先序线索二叉树

非递归遍历中序线索二叉树

posted @ 2019-08-06 18:18  天涯海角路  阅读(192)  评论(0)    收藏  举报