算法与数据结构笔记(二)二叉树遍历

二叉树的遍历

前序遍历

前序遍历(先序遍历)即先访问根节点,再访问左子树,最后访问右子树的顺序

递归实现前序遍历

function Preorder(node){
      if(node==NULL){
            return;
      }
      print(node.data);
      Preorder(node.left);
      Preorder(node.right);
}

由于前序遍历先访问根节点,所以前序遍历又被称为先根遍历。

中序遍历

中序遍历即先访问左子树,再访问根节点,最后访问右子树的顺序

递归实现中序遍历

function Inorder(node){
      if(node==NULL){
            return;
      }
      
      Inorder(node.left);
      print(node.data);
      Inorder(node.right);
}

由于中序遍历在中间访问根节点,所以中序遍历又被称为中根遍历。

后序遍历

后序遍历即先访问左子树,再访问右子树,最后访问根节点的顺序

递归实现后序遍历

function Postorder(node){
      if(node==NULL){
            return;
      }
      
      Postorder(node.left);
      Postorder(node.right);
      print(node.data);
}

由于后序遍历在最后访问根节点,所以后序遍历又被称为后根遍历。

层序遍历

层序遍历即按层访问树的元素。

迭代+队列是实现层序遍历

function LineOrder(root,queue){
      queue.put(root):
      while(queue.notEmpty()){
            node = queue.get();
            printf(node.data);
            child = node.children;
            while(child!=NULL){
                  queue.put(child);
                  child = child.next;
            }
            
      }
}
posted @ 2020-10-21 15:40  SemiprimeNumber  阅读(71)  评论(0编辑  收藏  举报