二叉树的相关操作(持续更新)
来源:互联网 发布:刷火车票的软件 编辑:程序博客网 时间:2024/05/18 02:41
1.二叉树非递归遍历遍历
(1)前序遍历思路(Binary Tree Preorder Traversal)
Tree root;//传入的树stack s;//用来存储所有根节点的栈list result;//存储遍历结果//树遍历过程while(!s.isEmpty || root != null){//将树的所有根节点入栈(每个节点都可看作一棵树的根节点)while(root != null){s.push(root);result.push(root.val);//处理遍历结果root=root.left;}//出栈root = s.pop().right; //继续循环入栈}
(2)中序遍历思路(Binary Tree Inorder Traversal)
<pre name="code" class="java">Tree root;//传入的树stack s;//用来存储所有根节点的栈list result;//存储遍历结果//树遍历过程while(!s.isEmpty || root != null){//将树的所有根节点入栈(每个节点都可看作一棵树的根节点)while(root != null){s.push(root);root=root.left;}//出栈root = s.pop(); //出栈操作result.push(root.val);//处理遍历结果root=root.right;<span style="white-space:pre"></span>//继续循环入栈}(3)后续遍历思路(Binary Tree Postorder Traversal)
Tree root;//传入的树stack s;//用来存储所有根节点的栈list result;//存储遍历结果Tree temp = null;//用来临时存储树节点,判断是否是树的右孩子//树遍历过程while(!s.isEmpty || root != null){//将树的所有根节点入栈(每个节点都可看作一棵树的根节点)while(root != null){s.push(root);root=root.left;}//出栈root = s.peek().right;if(root == null || root == temp){temp = s.pop();result.add(temp.val);root = null;if(!s.isEmpty()){if(temp != s.peek().right)root = s.peek().right;else{temp = s.pop();result.add(temp.val);}}}}
总结: 对于前序遍历,就是循环入栈,在入栈时对该节点进行处理;然后栈顶元素出栈,指针指向当前栈顶元素的右孩子继续循环入栈。
对于中序遍历,就是循环入栈;然后栈顶元素出栈,在出栈时对该节点进行处理,指针指向当前栈顶元素的右孩子继续循环入栈。
对于后序遍历,同样循环入栈;判断栈顶元素的右孩子是否是为空,如果为空则栈顶元素出栈,并对该节点进行处理;判断出栈的节点是否为栈顶节点的右孩子节点,若为右孩子继续出栈,否则指针指向当前栈顶元素的右孩子继续循环入栈。
0 0
- 二叉树的相关操作(持续更新)
- Linux相关操作命令(持续更新)
- C++ 文件相关操作(持续更新)
- 数据库相关操作-持续更新
- 二叉树的操作(后续更新)
- 软键盘输入法操作相关(持续更新中)
- 二叉树的相关操作(一)
- 二叉树的相关操作(二)
- 二叉树的相关操作(递归)
- git的基本操作(持续更新)
- redis相关操作(持续更新中)
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树的相关操作
- ORA-12705 invalid or unknown NLS parameter value specified
- DDX_Control
- 创建IOS静态库
- tomcat7配置
- GitHub 优秀的 Android 开源项目
- 二叉树的相关操作(持续更新)
- 程序员经验分享(转)
- 580活动网:举办年度会议注意事项
- 展开、收起div的jQuery代码
- php导出数据到excel,防止身份证等数字字符格式变成科学计数的方法
- volatile static
- dataTable 操作某条数据后刷新是否保留在当前页的方法
- XCode编译器介绍
- Cocos2d-x XML文件读取操作与解析操作