摘要:指的是的位置。算法比较简单,算法比较难想,可是原题都说了
preorder: root-left-right
inorder: left-root-right
postorder: left-right-root
order指的是root的位置。
recursive算法比较简单,iterative算法比较难想,可是leetcode原题都说了: recursive method is trivial, could you do iteration?
144.Binary Tree Preorder Traversal/*iterative*/ public List94.Binary Tree Inorder TraversalpreorderTraversal(TreeNode root) { List result = new LinkedList<>(); if(root == null) return result; Stack stack = new Stack<>(); stack.push(root); TreeNode n = root; while(!stack.isEmpty()){ n = stack.pop(); result.add(n.val); if(n.right!= null) stack.push(n.right); if(n.left != null) stack.push(n.left); } return result; } /*recursive*/ public List preorderTraversal(TreeNode root) { List result = new LinkedList<>(); preHelper(root,result); return result; } private void preHelper(TreeNode n, List result){ if(n == null) return; result.add(n.val); if(n.left != null) preHelper(n.left,result); if(n.right!= null) preHelper(n.right,result); }
/*iterative*/ public ListinorderTraversal(TreeNode root) { List result = new LinkedList<>(); TreeNode curr =root; Stack stack = new Stack<>(); while(curr!=null || !stack.isEmpty()){ while(curr!=null){ stack.push(curr); curr = curr.left; } curr = stack.pop(); result.add(curr.val); curr = curr.right; } return result; }
/* recursive*/ public List145.Binary Tree Postorder TraversalinorderTraversal(TreeNode root) { List result = new LinkedList<>(); inHelper(root,result); return result; } private void inHelper(TreeNode n, List result){ if(n == null) return; if(n.left!=null) inHelper(n.left,result); result.add(n.val); if(n.right != null) inHelper(n.right,result); }
/*iterative*/ public ListpostorderTraversal(TreeNode root) { LinkedList result = new LinkedList<>(); if(root == null) return result; TreeNode curr = root; Stack stack = new Stack<>(); stack.push(root); while(!stack.isEmpty()){ curr = stack.pop(); result.addFirst(curr.val); if(curr.left != null) stack.push(curr.left); if(curr.right != null) stack.push(curr.right); } return result; }
/*recursive*/ public ListpostorderTraversal(TreeNode root) { List result = new LinkedList<>(); postHelper(root,result); return result; } private void postHelper(TreeNode n, List result){ if(n == null) return; if(n.left != null) postHelper(n.left,result); if(n.right!= null) postHelper(n.right,result); result.add(n.val); }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/66117.html
摘要:树是计算机科学中经常用到的一种数据结构数是一种非线性的数据结构以分层的方式存储数据数被用来存储具有层级关系的数据比如文件系统中的文件树还被用来存储有序列表本章将研究一种特殊的树二叉树选择树而不是那些基本的数据结构是因为在二叉树上进行查找非常 树是计算机科学中经常用到的一种数据结构. 数是一种非线性的数据结构, 以分层的方式存储数据. 数被用来存储具有层级关系的数据, 比如文件系统中的文...
摘要:判断两棵树是否是相同题目要求传入两棵树的根节点,判断这两棵树是否相同此题的核心就在于如何遍历树。定义树的一种自然方式是递归的方式。一棵树是一些节点的集合,这个集合可以是空集。这个遍历算法可以用于场景如,计算一个节点的高度。 判断两棵树是否是相同 题目要求:传入两棵树的根节点,判断这两棵树是否相同此题的核心就在于如何遍历树。一旦我们解决了这个问题,题目也就迎刃而解了。下面就来介绍一下 关...
阅读 993·2023-04-25 14:41
阅读 2444·2021-09-28 09:35
阅读 3618·2019-08-30 15:53
阅读 1939·2019-08-29 15:26
阅读 1059·2019-08-28 17:59
阅读 4200·2019-08-26 13:45
阅读 2834·2019-08-26 13:33
阅读 1638·2019-08-26 11:46