zoukankan      html  css  js  c++  java
  • 二叉树

    二叉树的相关概念

    1、基本概念

      二叉树每个节点最多有两个子树的结构,通常被称为“左子树”和“右子树”。

    2、满二叉树

      每个节点必须有两个子树,并且叶节点在同一层。

     

    3、完全二叉树

      节点的标记就是节点的值,意思就是节点的值是连续的,从左到右不能断裂,必须连续;

    二叉树的相关遍历 

    1、前序遍历:根节点-》左子树-》右子树

    原则:先从根节点访问到左子树的低端,然后在访问右边(每一个子树又是一个二叉树)

     程序:

    //前序遍历二叉树:根节点-》左节点-》右节点
    	function preOrder($root)
    	{
    		$stack = [];
    		array_push($stack, $root);
    		while (!empty($stack)) {
    			$center_node = array_pop($stack);
    			echo $center_node->data.' ';
    			if($center_node->right != null) array_push($stack, $center_node->right);//右子树先入栈
    			if($center_node->left != null) array_push($stack, $center_node->left);
    		}
    	}

    2、中序:根节点左子树-》根节点-》右子树

    程序:

    //中序遍历二叉树:左节点-》根节点-》右节点
    	function mindOrder($root)
    	{
    		$stack = [];
    		$center_node = $root;
    		while(!empty($stack) || $center_node != null){
    			while ($center_node != null) {
    				array_push($stack, $center_node);
    				$center_node = $center_node->left;
    			}
    			$center_node = array_pop($stack);
    			echo $center_node->data.' ';
    			$center_node = $center_node->right;
    		}
    	}

    3、后序:左子树-》右子树-》根节点

     程序:

    //后序遍历二叉树:左节点-》右节点-》根节点
    	function afterOrder($root)
    	{
    		$stack = [];
    		$outStack = [];
    		array_push($stack, $root);
    		while(!empty($stack)){
    			$center_node = array_pop($stack);
    			array_push($outStack, $center_node);
    			if($center_node->left!=null)array_push($stack, $center_node->left);
    			if($center_node->right!=null)array_push($stack, $center_node->right);
    		}
    		while (!empty($outStack)){
    			$center_node= array_pop($outStack);
    			echo $center_node->data." ";
    		}
    
    	}
    

    完整的程序

    <?php
    	class Node{
    		public $left;
    		public $data;
    		public $right;
    	}
    	//前序遍历二叉树:根节点-》左节点-》右节点
    	function preOrder($root)
    	{
    		$stack = [];
    		array_push($stack, $root);
    		while (!empty($stack)) {
    			$center_node = array_pop($stack);
    			echo $center_node->data.' ';
    			if($center_node->right != null) array_push($stack, $center_node->right);//右子树先入栈
    			if($center_node->left != null) array_push($stack, $center_node->left);
    		}
    	}
    	//中序遍历二叉树:左节点-》根节点-》右节点
    	function mindOrder($root)
    	{
    		$stack = [];
    		$center_node = $root;
    		while(!empty($stack) || $center_node != null){
    			while ($center_node != null) {
    				array_push($stack, $center_node);
    				$center_node = $center_node->left;
    			}
    			$center_node = array_pop($stack);
    			echo $center_node->data.' ';
    			$center_node = $center_node->right;
    		}
    	}
    	//后序遍历二叉树:左节点-》右节点-》根节点
    	function afterOrder($root)
    	{
    		$stack = [];
    		$outStack = [];
    		array_push($stack, $root);
    		while(!empty($stack)){
    			$center_node = array_pop($stack);
    			array_push($outStack, $center_node);
    			if($center_node->left!=null)array_push($stack, $center_node->left);
    			if($center_node->right!=null)array_push($stack, $center_node->right);
    		}
    		while (!empty($outStack)){
    			$center_node= array_pop($outStack);
    			echo $center_node->data." ";
    		}
    
    	}
    $a=new Node();  
    $b=new Node();  
    $c=new Node();  
    $d=new Node();  
    $e=new Node();  
    $f=new Node();  
    $h=new Node();  
    $k=new Node();  
    $m=new Node(); 
    $a->data=1;  
    $b->data=2;  
    $c->data=3;  
    $d->data=4;  
    $e->data=5;  
    $f->data=6;  
    $h->data=7; 
    $k->data=8; 
    $m->data=9; 
    $a->left=$b;  
    $a->right=$c;  
    $b->left=$d;  
    $b->right=$e;  
    $c->left=$f;  
    $c->right=$h; 
    $d->left = $k;
    $h->right = $m; 
    mindOrder($a);
  • 相关阅读:
    TouTiao开源项目 分析笔记19 问答内容
    TouTiao开源项目 分析笔记18 视频详情页面
    TouTiao开源项目 分析笔记17 新闻媒体专栏
    TouTiao开源项目 分析笔记16 新闻评论
    TouTiao开源项目 分析笔记15 新闻详情之两种类型的实现
    TouTiao开源项目 分析笔记14 段子评论
    计算机专业大学课程学习路线图
    Windows GitLab使用全过程
    2017年最后一天
    生成6个1~33之间的随机整数,添加到集合,并遍历集合
  • 原文地址:https://www.cnblogs.com/meichao/p/9237370.html
Copyright © 2011-2022 走看看