遍历二叉树
来源:互联网 发布:ioscydia软件源闪退 编辑:程序博客网 时间:2024/06/03 19:52
题目一:中序遍历
递归:
void inorder(Bitree *t){ if (t) { inorder(t->lchild); printf("%c ", t->data); inorder(t->rchild); }}
非递归:
public class Solution { /** * @param root: The root of binary tree. * @return: Inorder in ArrayList which contains node values. */ public ArrayList<Integer> inorderTraversal(TreeNode root) { Stack<TreeNode> stack = new Stack<TreeNode>(); ArrayList<Integer> result = new ArrayList<Integer>(); TreeNode curt = root; while (curt != null || !stack.empty()) { while (curt != null) { stack.add(curt); curt = curt.left; } curt = stack.peek(); stack.pop(); result.add(curt.val); curt = curt.right; } return result; }}
题目二:前序遍历
递归:
public class Solution { public ArrayList<Integer> preorderTraversal(TreeNode root) { ArrayList<Integer> result = new ArrayList<Integer>(); traverse(root, result); return result; } // 把root为跟的preorder加入result里面 private void traverse(TreeNode root, ArrayList<Integer> result) { if (root == null) { return; } result.add(root.val); traverse(root.left, result); traverse(root.right, result); }}
非递归:
public class Solution { public List<Integer> preorderTraversal(TreeNode root) { Stack<TreeNode> stack = new Stack<TreeNode>(); List<Integer> preorder = new ArrayList<Integer>(); if (root == null) { return preorder; } stack.push(root); while (!stack.empty()) { TreeNode node = stack.pop(); preorder.add(node.val); if (node.right != null) { stack.push(node.right); } if (node.left != null) { stack.push(node.left); } } return preorder; }}
分治:
public class Solution { public ArrayList<Integer> preorderTraversal(TreeNode root) { ArrayList<Integer> result = new ArrayList<Integer>(); // null or leaf if (root == null) { return result; } // Divide ArrayList<Integer> left = preorderTraversal(root.left); ArrayList<Integer> right = preorderTraversal(root.right); // Conquer result.add(root.val); result.addAll(left); result.addAll(right); return result; }}
题目三:后续遍历
递归:
public ArrayList<Integer> postorderTraversal(TreeNode root) { ArrayList<Integer> result = new ArrayList<Integer>(); if (root == null) { return result; } result.addAll(postorderTraversal(root.left)); result.addAll(postorderTraversal(root.right)); result.add(root.val); return result; }
非递归:
class Solution {public: vector<int> postorderTraversal(TreeNode *root) { vector<int> result; stack<TreeNode *> myStack; TreeNode *current = root, *lastVisited = NULL; while (current != NULL || !myStack.empty()) { while (current != NULL) { myStack.push(current); current = current->left; } current = myStack.top(); if (current->right == NULL || current->right == lastVisited) { myStack.pop(); result.push_back(current->val); lastVisited = current; current = NULL; } else { current = current->right; } } return result; }};
题目四:层次遍历
public class Solution { public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) { ArrayList result = new ArrayList(); if (root == null) { return result; } Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.offer(root); while (!queue.isEmpty()) { ArrayList<Integer> level = new ArrayList<Integer>(); int size = queue.size(); for (int i = 0; i < size; i++) { TreeNode head = queue.poll(); level.add(head.val); if (head.left != null) { queue.offer(head.left); } if (head.right != null) { queue.offer(head.right); } } result.add(level); } return result; }}
题目五:二叉树迭代器
class BSTIterator {public: stack<TreeNode *> myStack; TreeNode *current; BSTIterator(TreeNode *root) { while (!myStack.empty()) { myStack.pop(); } current = root; } /** @return whether we have a next smallest number */ bool hasNext() { return (current != NULL || !myStack.empty()); } /** @return the next smallest number */ int next() { while (current != NULL) { myStack.push(current); current = current->left; } current = myStack.top(); myStack.pop(); int val = current->val; current = current->right; return val; }};
0 0
- 二叉树遍历、分层遍历
- 遍历二叉树--二叉树
- 【树】遍历二叉树
- 二叉树遍历
- 二叉树遍历
- 二叉树的遍历
- (原创)遍历二叉树
- 二叉树遍历-php
- 查找--遍历二叉树
- 遍历二叉树
- 二叉树遍历规则
- 二叉树的遍历
- 二叉树遍历
- 遍历二叉树
- 二叉树遍历问题
- 二叉树遍历
- 二叉树遍历(zz)
- 二叉树的遍历
- 卸载Source Insight 3时出现"Could not find the INSTALL.LOG"
- opencv画图函数
- 把word转换成pdf方法与应用
- [letecode java] Product of Array Except Self
- HDU 5009 Paint Pearls
- 遍历二叉树
- Android系统自带样式(android:theme)解析
- KMeans笔记 K值以及初始类簇中心点的选取
- Android-RoundCornerProgressBar——Android圆角进度条(Progress Bar)类库
- 快速打开Source的快捷键
- STL源码剖析 [简单应用总结二]
- Permutation sequence
- 关于java中的set方法以及get方法
- ubuntu更新内核切换内核启动