1. 程式人生 > >使用STL容器構成一棵樹

使用STL容器構成一棵樹

//使用STL構成一棵樹

#include<vector>    //vector容器
#include<iostream>    //輸入輸出

using namespace std;

const int LEAVES_MAX = 4;  //最大子葉數

//樹節點結構
struct TreeNode
{
  int num;
  vector<TreeNode> Sub;
};

vector<TreeNode>::iterator p;  //根節點指標

//用遞迴法生成一棵樹
void CreateTree(vector<TreeNode>::iterator Root)
{
  //如果節點值小於等於1,返回
  if(Root->num<=1) return;
  
  //新節點指標
  TreeNode *newNode;
  
  //為新子葉設定值
  for(int i=1;i<=LEAVES_MAX;i++)
  {
    newNode =new(TreeNode);
    newNode->num = Root->num - 1;
    Root->Sub.push_back(*newNode);
    delete newNode;
  }
  
  //遞迴產生子樹
  vector<TreeNode>::iterator child;
  for(child=Root->Sub.begin();
   child!=Root->Sub.end();
    child++)
    {
      CreateTree(child);
    }
}

//遞迴顯示樹的內容
void DisplayTree(vector<TreeNode>::iterator Root)
{
  //顯示節點內容
  cout<<" "<<Root->num;
  //如果此節點沒有子葉,返回
  if(Root->Sub.empty()==true) return;
  
  //遞迴處理子樹
  vector<TreeNode>::iterator child;
  for(child=Root->Sub.begin();
   child!=Root->Sub.end();
    child++)
    {
      DisplayTree(child);
    }

}

void main()
{
  TreeNode *Root;
  Root = new(TreeNode);
  Root->num = 3;
  CreateTree(Root);
  DisplayTree(Root);
  delete Root;
}

相關推薦

使用STL容器構成

//使用STL構成一棵樹#include<vector>    //vector容器#include<iostream>    //輸入輸出using namespace std;const int LEAVES_MAX = 4;  //最大子葉數//樹節點結構struct TreeN

證明N個節點構成的種類數

       Cayley公式是說,一個完全圖K_n有n^(n-2)棵生成樹,換句話說n個節點的帶標號的無根樹有n^(n-2)個。今天我學到了Cayley公式的一個非常簡單的證明,證明依賴於Prüfer編碼,它是對帶標號無根樹的一種編碼方式。     給定一棵帶標號的無根樹,找出編號最小的葉子節點,寫下與它

如何打印(Java)

.get stat color util emp println style ldl 多叉樹 有一棵多叉樹,將它打印出來。 import java.util.LinkedList; /** * 需求:按層打印一棵樹 * 說明:樹是保存在一個鏈表中 *

hdu6035 Colorful Tree 樹形dp 給定,每個節點有一個顏色值。定義每條路徑的值為經過的節點的不同顏色數。求所有路徑的值和。

void 題意 iostream cnblogs 編號 emp php scanf http /** 題目:hdu6035 Colorful Tree 鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=6035 題意:給定一棵樹,每

種下:有旋Treap

調整 同時 我們 ++ log int 隨機函數 for rtu 第一個平衡樹板子,有旋Treap。用隨機函數規定一個堆,維護點權的同時維護堆的性質,可以有效地避免退化成鏈。按我的理解,建立一棵二叉排序樹,樹的形態會和給出節點的順序有關。按照出題人很機智定理,

二叉——判斷是否是完全二叉

alt 條件 height 所有結點 col 直接 都沒有 分享圖片 color 二叉樹按層遍歷 判斷條件:結點的左右孩子只有4種情況 其中的三種情況有特例 條件1.結點有右孩子,沒有左孩子,直接返回false 條件2.結點左右孩子不全(有左沒右,左右都沒有),則後面遇

二叉——判斷是否是平衡二叉

可能 dtree 左右子樹 return 返回 abs left light proc 平衡二叉樹 (空樹或者左右兩個孩子高度差不超過1) 在涉及到二叉樹的題目時,遞歸函數非常好用 列出可能性-》整理出返回值的類型-》整個遞歸過程按照同樣的結構得到子樹的信息,整合子樹的信息

1、如何判斷是否是完全二叉

出現 層序 null bool ron 進行 while 代碼 新的 思路:通過樹的層序遍歷進行判斷。結點入隊時,當出現一個結點的孩子結點為空時,則之後就不能有新的結點入隊。 若沒有,則是完全二叉樹,否則不是完全二叉樹。 層序遍歷代碼: int after = 1;/

3、如何判斷是否是紅黑

假設 隊列 als 前序 紅黑樹 truct lse -s ron 一、紅黑樹的定義 紅黑樹是每個節點都帶有顏色屬性的二叉查找樹,顏色或紅色或黑色。除了二叉查找樹強制的一般要求以外,對於任何有效的紅黑樹有如下的額外要求: 性質1. 節點是紅色或黑色。 性質2. 根節

clas 個數 lac 判斷 top 列排序 class 相關 難度 Description 農場上有N(1<=N<=1000)棵樹。在上過計算機課後,Lin發現所有的樹實際上都是嚴格的二叉樹,二叉樹的每個非葉結點都恰好有兩個子結點,Lin給每個結點一個數表示

leetcode662+求的最大寬度,DFS

https://leetcode.com/problems/maximum-width-of-binary-tree/description/ struct TreeNode { int val; TreeNode *left; TreeNode *right;

判斷是不是平衡二叉

class Solution { public: bool IsBalanced_Solution(TreeNode* pRoot) { getDepth(pRoot); return isBalanced ; } //判斷左右子樹是不是都是平衡二叉

Is It A Red-Black Tree?(判斷是否為紅黑二叉

以前沒接觸過這種樹,看了別人的程式碼,加上了詳細的註釋。 思路全在註釋中。   我將測試樣例放上,以便複製。 3 9 7 -2 1 5 -4 -11 8 14 -15 9 11 -2 1 -7 5 -4 8 14 -15 8 10 -7 5 -6 8 15 -11 17

用 vue + d3 畫

結果預覽 github pages vue 和 d3 的角色 畫圖可分為兩步: 元素座標計算 資料繫結 座標計算只需要一些 api,本文使用 d3。 資料繫結既可以藉助 d3,也可以使用 vue。d3 通過操作 dom 實現,有點像 jQuery,d3 針對資料和 do

遞迴查詢檔案及其子檔案(需傳入和id)

首先明確大致的思路: 1.已知的資料有整棵樹 和 要刪除資料的id 2.根據id能夠查到其在 樹中對應的List(需遍歷) 3.找到List後確定要刪除List的children(treeNode.getId()==id) 4.判斷找到的treeNode是否有chil

LeetCode:572. Subtree of Another Tree(判斷是不是另外的子

Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and node values with a subtree

01.如何直觀的列印

1.java版本 //java語言 public class PrintBinaryTree { public static class Node { public int value; public Node left; pu

從陣列形式建立(用於leetcode測試)

這段時間時不時地會在leetcode上做些題,最近做到的大部分是與樹相關的題。由於是在本地的IDE上碼程式碼,如果每次測試都要到leetcode上來測的話,不僅要選中複製貼上一遍,而且每次測試還要讀一會條,一次兩次還好,次數多了還是比較煩。而如果在本地的類內的main()函式裡測試的話,每次

判斷是否是搜尋二叉 判斷是否是完全二叉

package class_04; import java.util.LinkedList; import java.util.Queue; /** * * 判斷一棵樹是否是搜尋二叉樹 * 判斷一棵樹是否是完全二叉樹 * */ public class Code