zoukankan      html  css  js  c++  java
  • Data Structure Binary Tree: Print ancestors of a given binary tree node without recursion

    http://www.geeksforgeeks.org/print-ancestors-of-a-given-binary-tree-node-without-recursion/

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 #include <queue>
     5 #include <stack>
     6 #include <string>
     7 #include <fstream>
     8 #include <map>
     9 using namespace std;
    10 
    11 struct node {
    12     int data;
    13     struct node *left, *right;
    14     node() : data(0), left(NULL), right(NULL) { }
    15     node(int d) : data(d), left(NULL), right(NULL) { }
    16 };
    17 
    18 void printancestor(node *root, int key) {
    19     if (!root) return;
    20     stack<node*> S;
    21     while (1) {
    22         while (root && root->data != key) {
    23             S.push(root);
    24             root = root->left;
    25         }
    26         if (root && root->data == key) break;
    27         if (S.top()->right == NULL) {
    28             root = S.top();
    29             S.pop();
    30             while (!S.empty() && S.top()->right == root) {
    31                 root = S.top();
    32                 S.pop();
    33             }
    34         }
    35         root = S.empty()? NULL : S.top()->right;
    36     }
    37     while (!S.empty()) {
    38         cout << S.top()->data << " ";
    39         S.pop();
    40     }
    41 }
    42 
    43 int main() {
    44     node *root = new node(1);
    45     root->left = new node(2);
    46     root->right = new node(3);
    47     root->left->left = new node(4);
    48     root->left->right = new node(5);
    49     root->right->left = new node(6);
    50     root->right->right = new node(7);
    51     root->left->left->left = new node(8);
    52     root->left->right->right = new node(9);
    53     root->right->right->left = new node(10);
    54     for (int i = 1; i < 11; i++) {
    55         printancestor(root, i);
    56         cout << endl;
    57     }
    58     return 0;
    59 }
  • 相关阅读:
    Python之数学(math)和随机数(random)
    《图解HTTP》读书笔记
    leetcode1008
    leetcode1007
    leetcode1006
    leetcode1005
    leetcode218
    leetcode212
    leetcode149
    leetcode140
  • 原文地址:https://www.cnblogs.com/yingzhongwen/p/3632460.html
Copyright © 2011-2022 走看看