美文网首页
树的遍历(先序)

树的遍历(先序)

作者: 刘小小gogo | 来源:发表于2018-08-13 22:04 被阅读0次
  1. 先序:
    解法一:递归:
/**
 * Definition for a binary tree node.
 * 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;
        traversal(root, result);
        return result;
    }
private:
    void traversal(TreeNode * root, vector<int> &ret){
        if(root != NULL){
            ret.push_back(root->val);
            traversal(root->left, ret);
            traversal(root->right, ret);
        }

    }
};

解法二:Divide and Conquer

/**
 * Definition for a binary tree node.
 * 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){
            vector<int> left =  preorderTraversal(root->left);
            vector<int> right =  preorderTraversal(root->right);
            
            result.push_back(root->val);
            result.insert(result.end(), left.begin(), left.end());
            result.insert(result.end(), right.begin(), right.end());
            
        }
        return result;
    }
};

解法三:迭代:
借助栈,先压入右节点,再压入左节点。

/**
 * Definition for a binary tree node.
 * 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*> s;
        if(root == NULL) return result;
        s.push(root);
        while(!s.empty()){
            TreeNode * tmp = s.top();
            s.pop();
            result.push_back(tmp->val);
            if(tmp->right){
                s.push(tmp->right);
            }
            if(tmp->left){
                s.push(tmp->left);
            }
        }
        return result;
        
    }
};

相关文章

  • 二叉树遍历算法

    二叉树遍历算法有4种,先序、中序、后序和层序遍历 先序遍历:先根、后左、再右中序遍历:先左、后根、再右后序遍历:先...

  • DFS和BFS——理解以及实现

    深度优先搜索(Depth First Search,DFS) DFS遍历类似于树的先序遍历,是树的先序遍历的推广。...

  • 二叉树-遍历算法

    先序遍历 思路:先根节点->左子树->右子树;二叉树如下图: 先序遍历结果:ABDEGCFHI 中序遍历 思路:先...

  • 重建二叉树与寻找下一个节点

    一、重建二叉树 题目:输入某二叉树的先序遍历和中序遍历的结果,请重建二叉树。假如输入的先序遍历和中序遍历的结果都不...

  • 数据结构与算法二叉树的遍历与线索二叉树以及森林

    1.二叉树的遍历先序遍历、中序遍历、后序遍历 2.层次遍历利用队列实现 3.由遍历序列构成二叉树先序、后序可以与众...

  • Java 二叉树

    创建一个二叉树对象 build 一个二叉树 遍历 先序遍历 后序遍历 中序遍历 先序遍历的结果为:0 1 3...

  • 二叉树的前序遍历、中序遍历、后序遍历、层次遍历

    二叉树的遍历方式主要有:先序遍历、中序遍历、后序遍历、层次遍历。先序、中序、后序其实指的是父节点被访问的次序。若在...

  • 由遍历序列恢复二叉树

    根据二叉树的定义,先序遍历是先访问根节点,然后再先序遍历左子树的,最后先序遍历右子树。因此,先序遍历序列中的第一个...

  • 67_二叉树的典型遍历方式

    关键词:先序遍历、中序遍历、后序遍历 0. 先序遍历(Pre-Order Traversal) 二叉树为空:无操作...

  • 二叉树 基础操作

    二叉树的使用 二叉树结构 先序创建二叉树 DFS 先序遍历二叉树 中序遍历二叉树 后序遍历二叉树 BFS 层次遍历...

网友评论

      本文标题:树的遍历(先序)

      本文链接:https://www.haomeiwen.com/subject/jgrpbftx.html