二叉树的遍历笔记

定义们:

前、中、后序三种遍历就是根结点是先于左右子树遍历还是后于左右子树遍历的问题。

前:根-左子树(根-左子树(根-左子树……-右子树)-右子树)-右子树

中:左子树(左子树(……)-根-右子树(……))-根-右子树

后:左子树(左子树(……)-右子树-根)-右子树-根


前序是:ABD(查看了小a是否为NULL,因为D是当前子树的根结点,之后应该遍历左子树了,左子树为NULL以后查看右子树小b也为NULL)ECFG 

中序:(小a为NULL说明左子树遍历完了所以轮到了根节点)D(该右子树的时候发现小b为NULL 可以说右子树遍历完了)BEAFCG

后序:DEBFGCA


数据结构:

typedef struct BtNode // binaryTreeNode
{
BtNode *leftchild;
BtNode *rightchild;
ElemType data;
}BtNode, *BinaryTree;

然后是基本的操作们:

1.建树//先建根->左子树->右子树// 

void buildBTree(BinaryTree &T)
{
ElemType ch;
cin >> ch;
if (ch == END)
{
T = NULL;
}
else
{

T = (BtNode*)malloc(sizeof(BtNode));

                //需要一个申请内存失败的判断

T->data = ch;
buildBTree(T->leftchild);
buildBTree(T->rightchild);
}
}

void NicePastOrder(BinaryTree T)//非递归的前序遍历
{
BtNode *ptr = T;
stack<BtNode*> st; // 保存之后去右边的路径
while (ptr != NULL || !st.empty()) 
{
while (ptr != NULL)
{
cout << ptr->data;
st.push(ptr);
ptr = ptr->leftchild;
}
ptr = st.top();
st.pop();
ptr = ptr->rightchild;
}




}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值