二叉树三种遍历的非递归思路(JAVASCRIPT)
来源:互联网 发布:阿里云弹性ip有什么用 编辑:程序博客网 时间:2024/05/19 11:44
二叉树在图论中是这样定义的:二叉树是一个连通的无环图,并且每一个顶点的度不大于3。有根二叉树还要满足根结点的度不大于2。有了根结点之后,每个顶点定义了唯一的父结点,和最多2个子结点。然而,没有足够的信息来区分左结点和右结点。如果不考虑连通性,允许图中有多个连通分量,这样的结构叫做森林。
这里,我使用javascript来写二叉树遍历的三种非递归方式,因为楼主学的是javascript,对于C,JAVA,C++这个都不是很熟,所以就只好使用javascript代替;
前序遍历
第一种方法:
var preorderTraversal = function(root) { var stack = []; var res = []; var p = root; if(root == null)return []; while(stack.length!=0 || p!=null){//Side by side to join the array, and deposited in the stack, the future need to use these root nodes into the right sub-tree while(p!=null){ stack.push(p); res.push(p.val); p = p.left; } // When p is empty, it means that both the root and the left subtree are traversed, and the right tree goes if(stack.length!=0){ p = stack.pop(); p = p.right; } } return res;};
前序遍历第二种方法:
var preorderTraversal = function(root) { var result = []; var stack = []; var p = root; while(stack.length!=0 || p != null) { if(p != null) { stack.push(p); result.push(p.val); // Add before going to children p = p.left; } else { var node = stack.pop(); p = node.right; } } return result;};
中序遍历
第一种方法:
var inorderTraversal = function(root) { var stack = []; var res = []; var p = root; if(root == null) return []; while( stack.length!=0 || p!=null){ while(p!=null){ stack.push(p); p = p.left; } if(stack.length!=0){ p= stack.pop(); res.push(p.val); p = p.right; } } return res;};
第二种方法:
var inorderTraversal = function(root) { var result = []; var stack = []; var p = root; while(stack.length!=0 || p != null) { if(p != null) { stack.push(p); p = p.left; } else { var node = stack.pop(); result.push(node.val); // Add after all left children p = node.right; } } return result;};
后序遍历
第一种方法:
var postorderTraversal = function(root) { var Stack = []; var result = []; if(root==null) return []; Stack.push(root); while(Stack.length!=0) { var node= Stack.pop(); result.push(node.val); if(node.left) Stack.push(node.left); if(node.right) Stack.push(node.right); } return result.reverse();};
第二种方法:
var postorderTraversal = function(root) { var result = []; var stack = []; var p = root; while(stack.length!=0 || p != null) { if(p != null) { stack.push(p); result.unshift(p.val); // Reverse the process of preorder p = p.right; // Reverse the process of preorder } else { var node = stack.pop(); p = node.left; // Reverse the process of preorder } } return result;};
阅读全文
0 0
- 二叉树三种遍历的非递归思路(JAVASCRIPT)
- 二叉树三种遍历的非递归算法
- 二叉树三种遍历的非递归算法
- 二叉树三种遍历的非递归算法
- 二叉树三种遍历的非递归算法
- 二叉树三种遍历的非递归算法
- 二叉树三种遍历的非递归算法
- 二叉树三种遍历的非递归算法
- 二叉树三种遍历的非递归形式
- 二叉树三种遍历的非递归算法
- 二叉树的遍历 递归非递归 思路和 java实现
- 二叉树的遍历 递归非递归 思路和 java实现
- 二叉树的遍历 递归非递归 思路和 java实现
- 二叉树的遍历 递归非递归 思路和 java实现
- 二叉树三种遍历方式的递归与非递归实现
- 二叉树三种遍历的递归与非递归算法
- 二叉树三种遍历(递归及非递归)的实现
- 二叉树三种遍历方法的递归与非递归实现
- 商品数据库表设计
- Android 开发
- Windows上的redis
- 在Windows操作系统下如何配置Java环境变量
- 前端开发工程化探讨--基础篇(长文)
- 二叉树三种遍历的非递归思路(JAVASCRIPT)
- 红黑树的插入和删除
- 触发器的学习
- Android热修复与插件化(三)ClassLoader
- 【数据结构】单链表的倒序、删除相同结点、按值排序等简单操作用java实现
- UVA 12325 Zombie's Treasure Chest
- android 简单的下拉刷新,上拉加载
- UVA 1583 Digit Generator(最小生成元+打表)
- 5819462.html