LeetCode OJ 之 Binary Tree Preorder Traversal (二叉树的前序遍历)
来源:互联网 发布:ubuntu vi删除行 编辑:程序博客网 时间:2024/05/22 18:26
题目:
Given a binary tree, return the preorder traversal of its nodes' values.
给定一个二叉树,返回前序遍历的结果。
For example:
Given binary tree {1,#,2,3}
,
1 \ 2 / 3
return [1,2,3]
.
Note: Recursive solution is trivial, could you do it iteratively?
思路:
非递归遍历时的思路是先输出结点值,再入栈,然后遍历左子树。退栈时,遍历栈顶结点的右子树。
详情参看:http://blog.csdn.net/u012243115/article/details/40615603 。
递归版代码:
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<int> preorderTraversal(TreeNode *root) { vector<int> result; if(root == NULL) return result; preorderTraversal(root,result); return result; } void preorderTraversal(TreeNode *root , vector<int> &result) { if(root == NULL) return; result.push_back(root->val); preorderTraversal(root->left,result); preorderTraversal(root->right,result); }};
非递归版代码一:
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<int> preorderTraversal(TreeNode *root) { vector<int> result; stack<TreeNode *> stk; TreeNode *p = root; while(p != NULL || !stk.empty()) { if(p != NULL) { result.push_back(p->val); stk.push(p); p = p->left; } else { p = stk.top(); stk.pop(); p = p->right; } } return result; }};
非递归版代码二:
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: //思路是根结点先入栈,然后根结点出栈,输出根结点,右孩子入栈(如果有的话)。左孩子入栈(如果有的话)。 vector<int> preorderTraversal(TreeNode *root) { vector<int> result; stack<TreeNode *> stk; if(root == NULL) return result; TreeNode *p = root; stk.push(p); while(!stk.empty()) { p = stk.top(); result.push_back(p->val); stk.pop(); if(p->right) stk.push(p->right); if(p->left) stk.push(p->left); } return result; }};
使用链表实现栈的效果:
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: //使用链表实现栈的效果,操作都一样,只是出栈方式不一样 vector<int> preorderTraversal(TreeNode *root) { vector<int> result; list<TreeNode *> lst; if(root == NULL) return result; TreeNode *p = root; lst.push_front(p);//插入链表头,相当于入栈 while(!lst.empty()) { p = lst.front();//取链表头 result.push_back(p->val); lst.erase(lst.begin());//删除链表头 if(p->right) lst.push_front(p->right); if(p->left) lst.push_front(p->left); } return result; }};
0 0
- LeetCode OJ 之 Binary Tree Preorder Traversal (二叉树的前序遍历)
- 【LeetCode】Binary Tree Preorder Traversal 二叉树的前序遍历(3种方法)- Easy+
- Binary Tree Preorder Traversal 二叉树的前序遍历
- binary-tree-preorder-traversal(二叉树的前序遍历)
- LeetCode 144 Binary Tree Preorder Traversal(二叉树的前序遍历)+(二叉树、迭代)
- LeetCode OJ 之 Construct Binary Tree from Preorder and Inorder Traversal (由二叉树的前序和中序序列构造二叉树)
- LintCode Binary Tree Preorder Traversal二叉树的前序遍历(非递归)
- 66.Binary Tree Preorder Traversal-二叉树的前序遍历(容易题)
- LeetCode Binary Tree Preorder Traversal 前序遍历二叉树 递归和非递归解法
- LeetCode:Binary Tree Preorder Traversal(非递归方法前序遍历二叉树)
- LeetCode OJ 之 Binary Tree Inorder Traversal (二叉树的中序遍历)
- LeetCode OJ 之 Binary Tree Postorder Traversal (二叉树的后序遍历)
- 【LeetCode-面试算法经典-Java实现】【144-Binary Tree Preorder Traversal(二叉树非递归前序遍历)】
- 144. Binary Tree Preorder Traversal 二叉树的前序遍历
- Binary Tree Preorder Traversal 二叉树的前向遍历(迭代非递归版本)
- 二叉树的先序遍历 Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal--二叉树的先序遍历
- LeetCode OJ 之 Binary Tree Level Order Traversal (二叉树的层次遍历)
- ajax给session赋值
- FFMPEG SDK流媒体开发2---分离.mp4等输入流音视频并且进行解码输出
- MyEclipse报错 Could not create the view: An unexpected exception was thrown.
- 连接linphone的服务器实现来电通话的问题解决
- 字符串匹配算法(三)
- LeetCode OJ 之 Binary Tree Preorder Traversal (二叉树的前序遍历)
- 黑马程序员——Java语言基础——04.多线程(1)多线程概念
- Linux新手入门:账号和密码文件 /etc/passwd和/etc/shadow抢沙发
- 派遣敢死队
- Apache DBCP数据库连接池溢出调整
- Android自定义ViewGroup中LayoutParam的应用
- 使用busybox制作rootfs
- Apache DBCP连接数据库异常重连
- python 读取文件的最后一行