树的三种遍历(递归和非递归)
来源:互联网 发布:最好的文档扫描软件 编辑:程序博客网 时间:2024/05/22 14:19
typedef struct BiTNode{ char data; struct BiTNode *lchild, *rchild; //左右孩子 }BiTNode,*BiTree;
//先序遍历(根左右)(递归)
void LastOrder(BiTNode *root){ if(root != NULL) { cout << root->data<<endl; LastOrder(root->lchild); LastOrder(root->rchild); } }
void PreOrder(BiTNode *root){ if(root != NULL) { cout << root->data<<endl; PreOrder(root->lchild); PreOrder(root->rchild); } }//中序遍历(左根右)(递归)void MidOrder(BiTNode *root){ if(root != NULL) { MidOrder(root->lchild); cout << root->data<<endl; MidOrder(root->rchild); } }
//后续遍历(左右根)(递归)void LastOrder(BiTNode *root){ if(root != NULL) { cout << root->data<<endl; LastOrder(root->lchild); LastOrder(root->rchild); } }//先序的非递归 需要用到栈void PreOrder(BiTNode *root){ if(root == NULL) return NULL; stack<BiTNode> st; st.push(root); BiTNode *temp; while(!st.empty()) { temp = st.top(); //返回栈顶元素 cout<<temp->data<<" "; st.pop(); if(temp->rchild!=NULL) //这里先遍历右节点,因为栈是后进先出,因为要先出左节点,所以要先进右节点 st.push(temp->rchild); if(temp->lchild!=NULL) st.push(temp->lchild); } }
//中序的非递归void MidOrder(BiTNode *root){if (root == NULL) return NULL; stack<BiTNode*> st; BiTNode cur = root->lchild; //create one pointer point to root's left node st.push(root); //root into stack while(cur != NULL && !(st.empty())) { while(cur !=NULL ) { st.push(cur); cur = cur->lchild; //一直向左遍历,然后进栈 } cur = st.top(); //cur = stack.top 就是最左的那个位置 st.pop(); //最左出栈 cout<<cur->data<<" "; //输出最左 cur = cur->rchild; }}//后序非递归(待补充)//树的深度
int depth(BiTNode *root){if(root==NULL)//如果rootoot为NULL,则深度为0,这也是递归的返回条件 return 0; //如果pRoot不为NULL,那么深度至少为1,所以left和right=1 int left=1; int right=1; left+=depth(root->lchild);//求出左子树的深度 right+=depth(root->rchild);//求出右子树深度 return (left>right?left:right)+1;//返回深度较大的那一个,+1是因为没算根节点那一层}
阅读全文
0 0
- 树的三种遍历(递归和非递归)
- 二叉树的三种遍历(递归+非递归)
- 二叉树的三种遍历方式(递归、非递归和Morris遍历)
- 二叉树的三种遍历方法(递归和非递归)(转载)
- 二叉树的三种遍历方法(递归和非递归)(转载)
- 二叉树的三种遍历方法(递归和非递归)(转载)
- 二叉树的三种遍历方法(递归和非递归)
- 二叉树的三种遍历方式(递归和非递归)
- 二叉树的三种遍历方式(递归 和 非递归)
- 树的三种递归、非递归遍历
- 树的递归和非递归遍历
- 二叉树的三种遍历的方法(递归和非递归完整版)
- 二叉树的三种遍历方式(递归和非递归的实现方法)
- 二叉树的三种遍历方式的递归实现和非递归实现
- 二叉树的递归和非递归方式的三种遍历
- 二叉树的存储方式以及递归和非递归的三种遍历方式
- 43 递归和非递归俩种方法实现二叉树的三种遍历
- 二叉树的遍历(递归和非递归)
- UE4蓝图初级教程之日夜交替
- fluent c++ blog
- 【Android】Animations(一)
- 欢迎使用CSDN-markdown编辑器
- js中对小数取整
- 树的三种遍历(递归和非递归)
- Deep Q-Learning深度增强学习算法
- 算法提高 ADV-95 字符串比较
- java 打印二维数组 Arrays.deepToString()的用法
- linux 调优 Linux内核参数详解
- java面向对象学习
- 对Region Proposal Network,RPN的理解
- 数的划分(NOIP2001&水题测试2017082401)
- 敏捷实践总结